2016-10-05 9 views
0

基本クラスにアクセスするときに抽象ゲッターを常に呼び出すのではなく、基本クラスに子インスタンスフィールドへの参照を格納する利点はありますか? getText()は決して変わらないフィールドを返している場合、以下のような子変数への参照を格納する基本クラス?

public abstract class BaseClass { 
    abstract String getText(); 

    public void printText() { 
     System.out.println(getText()); 
    } 
} 

と子クラス:

は、私は以下のような基本クラスを持っていると仮定します。

public ChildClass extends BaseClass { 
     private String text = "blah"; 

     @Override 
     public String getText() { 
      return text; 
     } 
    } 

代わりに以下のように変換する利点/欠点はありますか?

public abstract class BaseClass { 
    abstract String getText(); 

    private String text; 

    public void printText() { 
     System.out.println(text); 
    } 

    @PostConstruct 
    public void postConstruct() { 
     this.text = getText(); 
    } 
} 
+0

'getText()'が高価な呼び出しであるかどうか、また別の呼び出しで異なる結果を返すことができるかどうかによって異なります。 – shmosel

答えて

0

PostConstructの使用に関して、私はその部分については詳しく説明しthis questionにあなたを参照しますが、基本的に依存性の注入/多型の方法との組み合わせで、それはあなたが完全に持たせるためにそれを使用する意味を作ることができます初期化されたオブジェクト。

一般に、私はクラスが異なる振舞いを持っているので、あなたが提案する2つのアプローチは同等ではないと言います。 2番目のクラスでは、printText()のすべての呼び出しで同じテキストが印刷されることが保証されていますが、最初のバージョンでは、実装の子クラスにgetText()の実装が委任されているため、したがって、第2のバージョンは、第1のバージョンは不変ではない。これが望ましいかどうかは、具体的な状況で評価する必要があるもう一つの質問です。

関連する問題