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