Gibt es in Java Regeln zu Getter und Setter?

6 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Rein aus technisch/funktionaler Sicht gibt es da keine Unterschiede. Es ist vielmehr wie eine Konvention bzw. eine Gebrauchsart, wie man seinen Code am besten strukturiert.

Die von dir gewählte Art nutzt du sicherlich, weil so alle miteinander im Bezug stehenden Elemente gruppiert zusammenstehen und so möglicherweise Scrollaufwand eingespart werden kann.

Viele Entwickler wählen die andere Methode: Felder oben, Methoden darunter. Aber genauso könntest du auf Projekte (z.B. in C++ oder VB) treffen, wo die Felder unten deklariert werden.

Zu dem Thema habe ich vor zwei Jahren schon einmal etwas ausführlicher geschrieben. Lies hier: Java, wieso werden Methoden nicht in der richtigen Reihenfolge programmiert?

So lange hinter solchen Strukturierungen eine nachvollziehbare Logik / Ordnung steckt und sich diese auch stringent hält, ist alles ok. Sollte dem nicht so sein, würde ich solchen Code mit Kraut- und Rübenfeldern vergleichen und zu einer durchdachten Aufteilung raten. Solltest du einmal an einem Projekt arbeiten, an dem auch andere beteiligt sind (oder zu dem du dazustößt), würde ich deutlich anraten, dich dem dort genutzten Stil anzupassen, um die Ordnung zu wahren und es den anderen Entwicklern nicht schwer zu machen.

Morgoth364 
Fragesteller
 22.06.2020, 22:14

Vielen Dank für die ausführliche Rückmeldung!

0

Bin ich blind oder ist hier der einzige Unterschied einfach nur die Reihenfolge?

Also prinzipiell ist es schon konventioneller, ganz oben zuerst alle Variablen du deklarieren die man braucht und dann die Methoden zu schreiben. Dabei gibt es dann Leute die erst alle Setter und dann alle Getter schreiben, oder halt immer zu einem Attribut Getter und Setter direkt hintereinander.

Ich hoffe es ist klar dass das technisch überhaupt keinen Unterschied macht. Aber zumindest die Variablen würde ich auch alle direkt ganz oben deklarieren, der Rest ist eigentlich egal.

Naja, in meiner Klasse haben wir es so gelernt wie es der Typ im Tutorial macht und ich finde es auch so angenehmer und Java macht es sonst von sich aus so... Ich würde dir raten es so zu machen, da du, wenn du dann weiter in die Programmierung kommst, bzw. einen längeren Code hast es eventuell zu Schwierigkeiten kommen könnte.

Woher ich das weiß:eigene Erfahrung

Unabhängig von der Sprache ist es gängig erst die ganzen Properties anzugeben, dann die Methoden.

Aber grundlegend darf man auch Kuddelmuddel machen, liest sich dann halt weniger gut.

mintkissen  22.06.2020, 23:29

Bei C++ ist das umgekehrt.

0
mintkissen  23.06.2020, 00:12
@KarlRanseierIII

Du hast "gängig" geschrieben, und darauf bezog ich mich. Bei C++ ist es nämlich umgekehrt "gängig".

0
KarlRanseierIII  23.06.2020, 00:22
@mintkissen

Nein, auch das nicht. Im Endeffekt sind Properties private, die Mehrzahl der Methoden ist public, insofern erst Properties, dann Methoden.

0
mintkissen  23.06.2020, 00:26
@KarlRanseierIII

Nein, guck dir mal Opensource-Projekte in C++ an!

Normalerweise sieht das so aus:

class Foo {
public:
  void bar();
  int baz();
private:
  float qux_;
};

Es gibt natürlich auch viele Ausnahmen, aber gefühlt "halten" sich 90% bis 95% aller C++-Projekte daran.

Anders herum sieht man das bei C++ selten. Bei Java hingegen ist es üblich, so wie du es beschrieben hast. :)

0
KarlRanseierIII  23.06.2020, 00:53
@mintkissen
struct Foo {
  void bar();
  int baz();
private:
  float qux_;
};

vs.

class Foo {
  float qux;
public:
  void bar();
  int baz();
};

Es gibt keinen rationalen Grund bei einer class die publics an den Anfang zu ziehen.

0
mintkissen  23.06.2020, 01:54
@KarlRanseierIII

Das stimmt! Und dennoch ist es Konsens. Hab ich mir auch nicht ausgedacht, sondern hat sich im Laufe der Zeit so entwickelt.

Kann natürlich jeder machen, wie er lustig ist, aber es ging ja um das, was gängig ist. Und bei C++ ist eben etwas anderes gängig, als bei Java, auch wenn in beiden Welten beises möglich ist. :)

0
KarlRanseierIII  23.06.2020, 02:03
@mintkissen

Stimmt schon, es ist halt wie mit dem 1TBS und Co. (indendation style) - Nur daß sich die indendations unkompliziert umstylen lässt.

Gibt es eigentlich ein VCS, das auch nativ umstylt? Und auch z.B. Klassen nach bevorzugtem Stil umgestaltet? Das wäre mal innovativ.

0
mintkissen  23.06.2020, 04:22
@KarlRanseierIII

Genau dafür gibt es Hooks in allen gängigen VCSen, damit man noch schnell ein Tidy-/Beautify-/Style-/Test-Skript vor dem Commit drüber laufen lassen kann.

Du kannst also in deinem Code ...

if (foo()) bar();

... stehen haben, aber nach einem automatischen Test wird das hier committed:

if (foo()) {
  bar();
}

Aber bei so etwas sollte man vorsichtig sein, weil das schnell Dinge kaputt macht, auf die man als normal denkender Mensch gar nicht kommen kann. :)

0
KarlRanseierIII  23.06.2020, 11:55
@mintkissen

Hooks sind unzureichend. Damit der Abgleich funktionieren kann muß das wirklich intrinsisch bei allen Operationen korrekt mitberücksichtigt werden. Also auch z.B. bei der Prüfungen ob es Änderungskollisionen gibt usw. .

Aber bei so etwas sollte man vorsichtig sein, weil das schnell Dinge kaputt macht, auf die man als normal denkender Mensch gar nicht kommen kann. :)

Ja, die Gefahr besteht natürlich durchaus.

1

Gängig und aufgrund der Übersichtlichkeit zu empfehlen ist, erst die Attribute und dann die Methoden zu definieren, und diese gleichmäßig einzurücken.

Woher ich das weiß:Hobby – Ich programmiere in meiner Freizeit mit Java.