Java类的层次结构,如何实现贯穿始终的可选变量



我想知道是否有任何"干净"的方法可以在整个类层次结构中实现一个可选变量,而不必一直让它为null和null检查。假设我有以下抽象父类:

public abstract class Item {
public String name;
public Item(String name){
    this.name = name;
}
public String getName(){
    return name;
}

相当简单。现在,我有了另一个扩展这个的抽象类和另外几个扩展那个的抽象类,每个抽象类都有自己的一些额外变量/方法。Item还有一个扩展它的存根类(只有一个调用super()的构造函数),如果可以将Item具体化,则这可能不是必需的,但这取决于解决方案。

现在,假设这些具体类中的任何一个都可能包含MyObject的实例。将创建大量项目。Item层次结构中任何类的某些实例都会有它,有些则不会。程序无法在编译时进行判断。我真的无法将层次结构拆分为两个独立但几乎相同的树,一个有MyObject,另一个没有。这将导致大量的代码重复。用另一个包含MyObject的具体类将具体实现子类化意味着过度的类型检查,这会变得很难看,尤其是在层次结构增长的情况下。将接口/抽象类放在更高的位置也不是一个选项,因为这会将MyObject放在所有内容中。不管解决方案如何,所有这些都必须有一个公共接口/抽象类。

我可能很挑剔,应该在层次结构的顶部实现MyObject并对其进行null检查,或者使用一个简单的布尔方法来告诉我它是否存在,但我仍然觉得有点草率,如果可能的话,我想找到一个更好的解决方案。

您对问题的描述提醒了我Decorator模式的动机——一个过度生长的类层次结构,具有某种想要的"多重继承"one_answers"超级类的组合"。看看互联网上对Decorator的描述,例如,看看Reader/Writer标准Java类是如何实现的。

最新更新