2013-07-15 8 views
6

Im Moment erstelle ich eine Ladung von Klassen, die meine Konfiguration enthalten und das ist es. Ich speichere nur die Werte aus der Konfigurationsdatei.Getters für finale Variablen

Mehr als die Hälfte des Codes ist die Getters und ich frage mich, ob die Praxis immer noch die Getter haben oder nur auf die Variablen direkt zugreifen.

So folgt aus:

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

    final String name; 

    public final String getName() 
    { 
     return name; 
    } 
} 

Oder:

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

    public final String name; 
} 

Es ist wirklich dumm scheint alles da die Getter haben, wenn sie nicht wirklich etwas zu tun, aber die Variable zurück. Aber mir wurde gesagt, dass es gängige Java-Praxis ist, den Getter sowieso dort zu haben.

+1

Der Compiler wird sie trotzdem inline. Obwohl ich "java.util.Properties" für das verwenden würde, was Sie tun. – jlordo

+2

Mit endgültigen Variablen kann es albern aussehen, aber wenn Sie nicht-finale Variablen und Unterklasse denselben Variablennamen definiert haben, und Sie versuchen, auf diese Variablen zuzugreifen, dann werden Sie sehen, wie es ohne get/set wäre. Die richtige Kapselung ist immer die beste Vorgehensweise. – kosa

+0

@jlordo es war ein sehr einfaches Beispiel, das ich gab. 'Properties' ist in keiner Weise geeignet für das, was ich tue :) – Cheetah

Antwort

11

die Daten mit Getter Einkapselung kann mehrere Vorteile bieten, einschließlich:

  • Sie können das Feld in eine andere Darstellung ändern, ohne Anrufer zu beeinflussen.
  • Sie können zusätzlichen Code im Getter hinzufügen.
  • Sie können eine Schnittstelle implementieren, die die Getter bereitstellt.
  • Sie können schreibgeschützten Zugriff auf die Felder gewähren, auch wenn sie nicht final sind.
+1

Der wichtigste Grund, dies zu tun ist für [Kopplung] (http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29), die Sie in Ihrer Antwort erläutert. –

+0

@LuiggiMendoza Können Sie die Kopplung in Bezug auf Getter/Setter weiter erklären? –

+2

Wenn Sie mehrere Code-Paare mit der Repräsentation der Klasse haben, wird es effizienter, diese Repräsentation zu ändern. Encapsulation blendet die interne Repräsentation hinter einer Schnittstelle aus, die bei Änderungen der Repräsentation konstant bleiben kann. –

0

Die Praxis ich weiß, ist, dass Sie öffentliche statische letzte Felder mit unveränderlichen Typen verwenden können, wie System.out zum Beispiel. Ich füge Getter Instanzfelder jedoch hinzu.

Ich stimme Ihnen jedoch zu, dass es kaum eine Verletzung gibt, die ein endgültiges String ausstellt. Vorsicht vor veränderlichen Typen. Darüber hinaus, da Inlining und Codegenerierung in der IDE sind, sind die Kosten der Getter eher gering, sowohl beim Schreiben von Code als auch zur Laufzeit.