我想知道是否有任何“干净”的方法在整个类层次结构中实现一个可选变量,而不是简单地将其保留为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检查,或者使用一个简单的布尔方法来告诉我它是否存在,但它对我来说仍然感觉有点草率,我想要如果可能的话,找到更好的解决方案。