Getter/Setter innerhalb der entsprechenen Klasse verwenden?



  • Angenommen ich habe eine Klasse K mit Feld f und Methode m. Wenn ich nun mit m auf f zugreifen will, mache ich das besser direkt:

    public void printF()
    {
    System.out.println(f)
    }
    

    oder über eine Getter-Methode:

    public void printF()
    {
    System.out.println(getF());
    }
    

    Für eine Antwort, idealerweise mit Referenz, wäre ich sehr dankbar 👍



  • Hier nur meine Meinung:

    Ich sehe keinen Grund die Methode zu verwenden, sofern dort nur ein return f; steht. Sinnvoll ist das denke ich nur wenn getF() noch weitere Sachen macht.

    Ansonsten ist es wahrscheinlich Geschmackssache. Einige mögen es für wichtig halten Zugriffe nur über die Methode zu machen egal von wo.



  • Getter und Setter benutzt man um die Attribute einer Klasse zu abstrahieren. Wenn man dann später die Implementation der Klasse ändern, braucht man kein Client Code anzupassen.

    Somit macht es keinen Sinn die Attribute für die eigene Klasse zu abstrahiert.



  • DEvent schrieb:

    Getter und Setter benutzt man um die Attribute einer Klasse zu abstrahieren. Wenn man dann später die Implementation der Klasse ändern, braucht man kein Client Code anzupassen.

    Somit macht es keinen Sinn die Attribute für die eigene Klasse zu abstrahiert.

    Na, da kann ich dir nun nicht pauschal zustimmen. Wenn Setter und Getter genutzt werden, können auch weitere Aktionen dabei ausgelöst werden. Im Allgemeinen würde ich daher auch intern eher zu diesen Methoden greifen. Falls dann später z.B. ein Getter geändert wird, werden diese Vorgaben auch intern direkt genutzt.

    Allerdings gibt es genügend Fälle, in denen man direkt mit dem Wert arbeiten möchte (ohne Nebeneffekte). Dann greift man direkt auf die Variable zu. Man sollte sich also immer klar machen, was man gerade damit vor hat.



  • DarkGuardian schrieb:

    DEvent schrieb:

    Getter und Setter benutzt man um die Attribute einer Klasse zu abstrahieren. Wenn man dann später die Implementation der Klasse ändern, braucht man kein Client Code anzupassen.

    Somit macht es keinen Sinn die Attribute für die eigene Klasse zu abstrahiert.

    Na, da kann ich dir nun nicht pauschal zustimmen. Wenn Setter und Getter genutzt werden, können auch weitere Aktionen dabei ausgelöst werden. Im Allgemeinen würde ich daher auch intern eher zu diesen Methoden greifen. Falls dann später z.B. ein Getter geändert wird, werden diese Vorgaben auch intern direkt genutzt.

    Aber es ist trivial die eigene Klasse zu ändern, wenn man mal was komplexeres mit dem Attribute macht und man doch den Getter/Setter verwenden will.


  • Mod

    Das ist eigentlich eine sehr interessante Frage und ich bin unsicher, wie sie zu beantworten ist. Aber ich habe eine Beobachtung gemacht: Es gibt ja diese ganzen Refactoringtools. Zum Beispiel hat Netbeans Refactoring-Werkzeuge eingebaut. Unter anderem auch ein Werkzeug, mit dem man Attribute kapseln kann. Es werden dann also Getter/Setter generiert. ...und auch gleich überall eingebaut. Auch in der gleichen Klasse, in der man sie nicht notwendigerweise benötigen würde. Hat mich damals etwas überrascht, als ich das gesehen habe. Aber vielleicht gibt es ja einen guten Grund, Getter/Setter auch klassenintern zu nutzen.



  • Wenn eine Setter-Methode z.B. einen Wertüberprüfung macht, so ist es doch sinnvoll, diese auch innerhalb der Klasse zu nutzen. Daher halte ich es schon für vorteilhaft, wenn man Getter und Setter auch klassenintern nutzt.

    Aber es kann natürlich auch Ausnahmen geben. Es ist leider nicht immer alles so eindeutig, aber das macht die Softwareentwicklung ja auch gleich spannender, oder?



  • Ich benutze die Getter/Setter auch innerhalb der Klasse, ausser an den Stellen natürlich, wo die eigentliche Logik des Getter/Setter implementiert wird. So ist es einheitlich und wenn ich die Logik anpassen will, dann mache ich das nur noch zentral.


Anmelden zum Antworten