0

クラス階層全体にオプションの変数を実装する「クリーンな」方法があるかどうか疑問に思っています.nullのままにして常にnullcheckingする必要はありません。次の抽象親クラスがあるとします。

public abstract class Item {

public String name;

public Item(String name){
    this.name = name;
}

public String getName(){
    return name;
}

かなり簡単です。これを拡張する別の抽象クラスと、それを拡張するいくつかの抽象クラスがあり、それぞれに独自の変数/メソッドがいくつか追加されています。Item には、それを拡張するスタブ クラスもあります (super() を呼び出すコンストラクター以外は何もありません)。これは、Item を具象化できる場合は必要ないかもしれませんが、それはソリューションによって異なります。

ここで、これらの具象クラスのいずれにも、潜在的に MyObject のインスタンスが含まれている可能性があるとしましょう。大量のアイテムが作成されます。Item 階層内のいずれかのクラスのインスタンスの一部にはそれがあり、一部にはありません。プログラムがコンパイル時に通知する方法はありません。階層を 2 つの別個のほぼ同一のツリー (MyObject を含むツリーと含​​まないツリー) に実際に分割することはできません。これにより、多くのコードの重複が発生します。MyObject を含む別の具象クラスで具象実装をサブクラス化すると、過剰な型チェックが行われ、特に階層が大きくなると見苦しくなります。インターフェイス/抽象クラスをさらに上に配置することも、すべてに MyObject を配置するため、オプションではありません。解決策はともかく、

私はつまらないかもしれませんし、階層の最上位に MyObject を実装して nullcheck するか、単純なブール値メソッドを使用して存在するかどうかを教えてください。可能であれば、より良い解決策。

4

1 に答える 1

0

あなたの問題の説明は、Decorator パターンのまさに動機を思い出させます-ある種の「多重継承」と「スーパークラスの組み合わせ」が必要な、大きくなり過ぎたクラス階層です。インターネット上のDecoratorの説明を見てください。良い例として、 Reader / Writer の標準 Java クラスがどのように実装されているかを見てください。

于 2013-10-16T16:00:25.323 に答える