Erste Schritte felder, die public final sind

  • Themenstarter Themenstarter C_A
  • Beginndatum Beginndatum
C

C_A

Gast
folgender gedanke: ich habe eine klasse mit beliebig vielen feldern. das prinzip der kapselung sagt, dass ich die felder private mache und dafuer zugriffsmethoden zur verfuegung stelle. Das heit

Java:
cLass Mensch 
{
   private final int gebJahr;
   public Mensch (){(gebJahr = 1975;   }

   int getGeburtsjahr()
   {
       return gebJhar;
   }

}

Warum brauche ich hier eine zugriffsmethode? kann ich hier nicht mit dem gleichen ergebnis das feld public final machen und mir den code fuer die zugriffsmethode schenken ?
 
Zuletzt bearbeitet von einem Moderator:
Bei public static finals. Aber in diesem Fall eher nicht. Dass die Variable final ist, ist ja schon fast eine "Designentscheidung" (auch wenn zufällig die Semantik eines Geburtsjahres hier suggeriert, dass es das nicht ist).
 
kann ich hier nicht mit dem gleichen ergebnis das feld public final machen und mir den code fuer die zugriffsmethode schenken ?
Ja, für dieses Beispiel stimmt das. Diese Klasse ist dann aber eher eine Datenstruktur als eine Klasse im Sinn von OO.
 
Wenn du dir absolut sicher bist dass die Klasse immutable bleiben soll und keine internen Berechnungen notwendig sind, geht das in Ordnung.

Ich würde z.B. eine generische Pair-Klasse auch so schreiben:
Java:
public class Pair<A,B> {
   public final A a;
   public final B b;
   public Pair(A a, B b) {
       this.a = a;
       this.b = b;
   }
}

Getter-Methoden würden hier keinerlei Vorteile bringen.

Allerdings erwarten diverse Frameworks immer noch Klassen nach dem JavaBean-Standard, und da müsstest du doch wieder getter (und sogar setter, selbst wenn die nur UnsupportedOderationExceptions werfen) liefern.
 

Zurück
Oben