Member-Variablen mit settern setzten

Luk10

Top Contributor
Grüße,

Ich lese des öfteren, dass Klasseneigene Membervariablen mit Settern gesetzt werden, anstatt sie direkt zu setzten. Beispiel:

Java:
class Foo {
  
  private int bar;

  public void setBar(int bar) {
    this.bar = bar;
  }

  public void doSomething(int a) {
    setBar(a);
  }

}

Hat das einen Sinn, oder ist es einfach nur ein anderer "Coding"-Stil? Was haltet ihr davon gegenüber der normalen Zuweisung?

Danke,
-Luk10-
 

faetzminator

Gesperrter Benutzer
Man sollte nie* direkt auf Member zugreifen, sondern immer per Getter und Setter. Sei es, dass du irgendwann Logging, Access Restrictions, Validierungen oder was auch immer einbauen willst.

*es gibt natürlich Situationen, in denen innerhalb der Klasse ein Feld irgendwie speziell gesetzt werden muss, bei dem man die Validierung o.ä. im Setter umgehen will. Aber das sind Ausnahmefälle.
 

Luk10

Top Contributor
Wirklich? Selbst wenn es in der selben Klasse ist? Ich meine, die Variablen sind doch
Code:
private
...

Kann mir jemand den genauen Unterschied zwischen "Instanzvariablen" und "Membervariablen" erklären, bzw was das oben im Beispiel ist.

Danke,
-Luk10-
 

poku17

Mitglied
Membervariable ist ein Synonym für Instanvariable...

Und ja, man sollte immer mit Gettern und Settern arbeiten. Am Anfang um sich daran zu gewöhnen (auch wenn es nicht unbedingt relevant ist fuer kleine Programme) weil es später aus verschiedenen Gründen relevant sein wird:

- Die Variable darf nur aus einem bestimmten Zahlenbereich sein.
- Es wird auf anderen Wegen auf die zu ändernden/empfangenden Daten zu gegriffen
(z.B. über eine Datenbank oder eine "Live-Anwendung" ).
- Wenn andere Leute mit an einem Projekt arbeiten, stellt man ihnen dadurch diese Methoden zur
Verfügung, damit sie bestimmte Werte einfach ändern können und für einen selbst sichergestellt ist,
dass die Variablen nicht von Außen z.B. auf ein im ungültigen Wertebereich liegenden Wert geändert
werden oder ein null-Objekt erhalten.
 
Zuletzt bearbeitet:

Luk10

Top Contributor
Also schreibt man auch

Java:
public void foo() {
  setBar(bar + 5);
}

wenn man bar um 5 erhöhen will ... das erscheint mir wahnsinnig umständlich und aufwändig ...

EDIT: aufwändig
 
Zuletzt bearbeitet:

Fu3L

Top Contributor
Innerhalb einer Klasse würde ich das nicht unbedingt tun. Kann nicht schaden und ist gut, aber muss nicht soo dringend, weil man das meist überblicken kann.
Aus Performancegründen kanns bei bestimmten Klassen auch Ausnahmen geben, was die Setter angeht. Aber sowas macht man besser, wenn man weiß, was man tut ;) (Ein Beispiel wäre die Vectorklasse in der jMonkeyEngine. Davon die Komponenten auszulesen passiert in einem Spiel in einer Sekunde viele tausende Mal)
 

tuttle64

Bekanntes Mitglied
In der Regel werden die Instanzvariablen über den Konstruktor gesetzt und die Getter- und Setter werden nur noch für diejenigen Variablen erzeugt, die auch gelesen resp. verändert werden müssen/dürfen.
 
V

vanny

Gast
In der Regel werden die Instanzvariablen über den Konstruktor gesetzt und die Getter- und Setter werden nur noch für diejenigen Variablen erzeugt, die auch gelesen resp. verändert werden müssen/dürfen.

selbst da bietet es sich an, mit einem setter zu arbeiten (dann halt private), weil dann auch diese Zuweisung prezisiert/geprüft/berechnet werden kann und spätere Änderungen aus dem Konstruktor verschwinden.
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Also schreibt man auch
Java:
public void foo() {
  setBar(bar + 5);
}
wenn man bar um 5 erhöhen will ... das erscheint mir wahnsinnig umständlich und aufwändig ...

Eigentlich wäre das dann
[c]setBar(getBar()+5);[/c]

Und ja, das ist umständlich. So umständlich, dass ich es in der Praxis noch nicht gesehen habe. Das Argument, dass bei den 1000000 Memberzugriffen, die man schreibt, irgendwann mal 5 Zugriffe auf 1 Member über setter gemacht werden müssen, ist ziemlich schwach. Eigentlich wäre es schön, das immer so zu machen, schon wegen des Uniform access principle - Wikipedia, the free encyclopedia , aber ... das gibt es eben in Java nicht. Für alles andere bräuchte man einen http://www.java-forum.org/allgemeine-java-themen/44575-staerkerer-access-modifier-private.html ... ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Zugriff auf Member-Variablen Java Basics - Anfänger-Themen 8
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
W OOP Member anderer Klassen erreichen Java Basics - Anfänger-Themen 1
S Kapselung Member korrekt nach aussen verfügbar machen Java Basics - Anfänger-Themen 6
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
S Gutes Design mit statischen oder Member-Methoden Java Basics - Anfänger-Themen 53
E Statische Member können nicht vererbt werden? Java Basics - Anfänger-Themen 10
hdi kleine Verständnisfrage lokale + Member Variable Java Basics - Anfänger-Themen 10
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
T Variablen Java Basics - Anfänger-Themen 1
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
M Aufsummieren von variablen Wertegrößen Java Basics - Anfänger-Themen 17
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
Arif Vererbung Methodenvererbung mit finalen Variablen Java Basics - Anfänger-Themen 1
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Variablen umbenennen Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
mars90 Fehler in der Variablen Deklaration Java Basics - Anfänger-Themen 8
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
A Übergreifende Variablen Java Basics - Anfänger-Themen 17
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
P Variablen Variablen voneinander abhängig Java Basics - Anfänger-Themen 54
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
temi Redundante Variablen Java Basics - Anfänger-Themen 29
Aprendiendo Zweifel mit versteckter Variablen Java Basics - Anfänger-Themen 16
L Variablen einmal nur zu weisen Java Basics - Anfänger-Themen 62
D Statische Variablen/Methoden Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
S Vererbung Variablen klassenübergreifend nutzen Java Basics - Anfänger-Themen 42
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
L Variablen dekleration + reset Java Basics - Anfänger-Themen 16
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
S Variablen Flexible Variablen Namen Java Basics - Anfänger-Themen 3
R Erste Schritte 3 Variablen hochzählen lassen Java Basics - Anfänger-Themen 1
RowdyN Variablen Variablen beliebig benennen? Java Basics - Anfänger-Themen 6
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
H Variablen einer Schleife zwischenspeichern Java Basics - Anfänger-Themen 2
P Klassen Variablen von einer Klasse zur anderen Java Basics - Anfänger-Themen 5
H Objekt überschreibt Variablen vorheriger Objekte Java Basics - Anfänger-Themen 2
P Variablen in Excel speichern Java Basics - Anfänger-Themen 6
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
F Variablen unterschiedlicher Datentypen Java Basics - Anfänger-Themen 6
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
P Textfelder in Variablen speichern Java Basics - Anfänger-Themen 13
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
J Vererbung Variablen aus Superklasse übernehmen Java Basics - Anfänger-Themen 2
L Variablen aus TXT Datei auslesen und vergleichen. Java Basics - Anfänger-Themen 5
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
L zwei Variablen gleichzeitig übergeben Java Basics - Anfänger-Themen 6
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
D Klassen Verhalten von Klassenvererbung bei Variablen Java Basics - Anfänger-Themen 1
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7
S OOP Werte von Vektoren mit 3 Variablen ausgeben lassen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben