0

我想知道是否有任何“干净”的方法可以在整个类层次结构中实现可选变量,而不会简单地将其保留为空并一直进行空检查。假设我有以下抽象父类:

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 或使用简单的布尔方法来告诉我它是否存在,但对我来说仍然感觉有点草率,我想找到一个如果可能的话,更好的解决方案。

4

1 回答 1

0

你对问题的描述让我想起了装饰器模式的动机——一个过度生长的类层次结构,带有某种想要的“多重继承”和“超类的组合”。看看互联网上对装饰器的描述,例如看看Reader / Writer 标准 Java 类是如何实现的。

于 2013-10-16T16:00:25.323 回答