Frage

Wenn Sie eine Klasse mit einigen Klar haben bekommen / set Eigenschaften, gibt es keinen Grund, die Getter innerhalb der Klassenmethoden zu verwenden, oder Sie verwenden sollen nur die privaten Membervariablen? Ich denke, es über Setter eher ein Argument sein könnte (Validierungslogik?), Aber ich frage mich nur über Getter.

Zum Beispiel (in Java) - gibt es keinen Grund Option 2 zu verwenden:

?
public class Something
{
    private int messageId;
    public int getMessageId() { return this.messageId; }
    public void setMessage(int messageId) { this.messageId = messageId; }

    public void doSomething()
    {
        // Option 1:
        doSomethingWithMessageId(messageId);

        // Option 2:
        doSomethingWithMessageId(getMessageId());
    }
}
War es hilfreich?

Lösung

Java-Programmierer in der Regel dazu neigt, über die Verwendung von Getter-Methoden sehr konsequent zu sein. I-Programm mehrere Sprachen, und ich bin nicht so konsequent über sie;)

Ich würde sagen, solange Sie nicht macht einen Getter es ist in Ordnung, die rohe Variable zu verwenden - für privat Variablen. Wenn Sie einen Getter zu machen, sollten Sie nur, dass die Verwendung sein. Wenn ich einen Getter für einen privaten Bereich zu machen, schlägt mein IDE, dass sie roh Feld automatisch für mich ersetzen Zugriffe, wenn ich einen Getter einzuführen. Das Umschalten auf einen Getter mit nur wenigen Tastendrücken entfernt (und ohne jede Chance einzuführen Fehler), so neige ich dazu, es zu verzögern, bis ich es brauche.

Natürlich, wenn Sie wie Getter-Injektion stopfen wollen, einige Arten von Proxying und Subklassifizieren Framworks wie Hibernate, müssen Sie Benutzer Getter!

Andere Tipps

Mit Getter Sie die Variablen versehentlich ändern werde nicht :) Auch, wenn Sie beide Getter verwenden und die „rohen“ Variable, kann Ihr Code verwirrt.

Auch wenn Sie Vererbung verwenden und neu definierten die Getter-Methoden in den Kinderklassen, Getter-Methoden unter Verwendung ordnungsgemäß arbeiten, während die die rohen Variablen würde nicht.

Wenn Sie die Getter-Methode überall -. Und in Zukunft bei allen Anrufen von getMessageID einen Code-Suche durchführen () Sie werden alle von ihnen zu finden, während, wenn Sie die Privaten benutzt hatte, einige verpassen können

Auch wenn es jemals Logik in der Setter-Methode eingeführt werden, müssen Sie nicht Sorgen über mehr als 1 Ort für sie zu verändern.

Wenn der Wert, den Sie das Objekt zuweisen ein bekannter oder verifiziert Wert ist, könnten Sie sicher die private Variable direkt verwenden. (Außer vielleicht in einigen speziellen Situationen, in denen es offensichtlich ist, warum so schlimm sein würde.) Egal, ob Sie tun oder nicht, ist mehr eine Frage des Geschmacks oder Stil. Es ist kein Performance-Problem entweder, wie der Getter oder Setter wird vom Compiler inlined werden, wenn es einfach genug ist.

Wenn der Wert der Klasse unbekannt ist, sollten Sie die Eigenschaft verwenden, es zu setzen, so dass Sie die Eigenschaft von illegalen Werten zu schützen.

Hier ist ein Beispiel (in C #):

public class Something {

   private string _value;

   public string Value {
      get {
         return _value;
      }
      set {
         if (value == null) throw new ArgumentNullException();
         _value = value;
      }
   }

   public Something() {
      // using a known value
      _value = "undefined";
   }

   public Something(string initValue) {
      // using an unknown value
      Value = initValue;
   }

}

Wenn Sie die Getter verwenden Sie gewährleisten Sie den Wert nach jeder Logik erhalten / Entscheidungen wurden auf sie angewendet. Dies ist wahrscheinlich nicht die typische Situation, aber wenn es ist, befinden Sie sich dafür danken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top