2016-10-05 2 views
0

Hat es einen Vorteil, einen Verweis auf ein untergeordnetes Instanzfeld in der Basisklasse zu speichern, anstatt immer einen abstrakten Getter aufzurufen, wenn in der Basisklasse darauf zugegriffen wird?Basisklasse, die einen Verweis auf die untergeordnete Variable speichert?

Angenommen, ich habe eine Basisklasse wie unten:

public abstract class BaseClass { 
    abstract String getText(); 

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

Und ein Kind Klasse wie unten, wo getText() ein Feld zurückkehrt, die nie ändern wird.

Gibt es einen Vorteil/Nachteil, um stattdessen zu den unten genannten zu konvertieren?

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

Es hängt davon ab, ob 'getText()' ein teurer Anruf ist und ob bei verschiedenen Aufrufen unterschiedliche Ergebnisse zurückgegeben werden können. – shmosel

Antwort

0

In Bezug auf die Verwendung von PostConstruct, und ich werde Sie this question auf diesem Teil zu erarbeiten beziehen, aber im Wesentlichen in Kombination mit Dependency Injection/polymorphen Methoden kann es Sinn machen, es zu benutzen, dass Sie ein voll machen müssen initialisiertes Objekt

Im Allgemeinen würde ich sagen, dass die beiden Ansätze, die Sie vorschlagen, nicht gleichwertig sind, weil die Klassen ein unterschiedliches Verhalten haben. Für Ihre zweite Klasse ist garantiert, dass bei jedem Aufruf an printText() derselbe Text gedruckt wird, während für Ihre erste Version der Text jedes Mal anders sein kann, da die Implementierung von getText() an die implementierende Kindklasse delegiert ist. Die zweite Version hat also eine Invariante, die erste nicht. Ob dies wünschenswert ist oder nicht, ist eine weitere Frage, die Sie in Ihrem konkreten Kontext bewerten müssen.

Verwandte Themen