Hallo,
ich lese gerade das Buch Java ist auch eine Insel.
Dabei wird gesagt, dass man nur Getter und Setter Methode benutzen soll.
Ich verstehe den Sinn usw. aber bei den Getter Methoden verstehe ich eins nicht, und zwar kann man doch bei folgendem Beispiel:
Java:
publicclassPlayer{privateString name ="";privateString item ="";publicStringgetName(){return name;}publicvoidsetName(String name ){if( name !=null&&!name.trim().isEmpty())this.name = name;}publicStringgetItem(){return item;}publicvoidsetItem(String item ){if( item !=null&&!item.trim().isEmpty())this.item = item;}}
Die setItem Mehtode umgehen, und mithilfe der Get Mehtode und dann der Methoden der String klasse das Item ändern, ohne das setItem benutzt wird.
In C++ konnte man da mit const was machen, aber hier bei Java?
(Zunächst wäre das ja nicht schlimm, aber wenn zum Beispiel in der setItem Mehtode ein Counter oder so mitzählt wie oft ein Item geändert wird entsteht bei dem Beschrieben Fall ja dann ein Logik Fehler/Sicherheits Feherl)
Also da komm ich beim besten Willen nicht dahinter wie du vorgehen möchtest?
sowas hier funktioniert auf jeden fall nicht:
Java:
Player play =newPlayer();
play.setItem("Deutschland");
play.getItem()="bLA";//Compiler Fehler: "The left-hand side of an assignment must be a variable"
So wie ich dich verstanden habe, hast du ein Problem damit zu verstehen weshalb du die Setter-Methode brauchst. Weil du ja theoretisch mit dem Getter auf die Variable zugreifen könntest. Mit deinen Methoden kannst du allerdings deinen Variablen keinen neuen Wert zuweisen ohne die Setter zu benutzen.
Wenn doch? Dann zeig Uns doch wie du es anstellen würdest, dann könnten wir deinen Gedankengang vllt. besser nachvollziehen.
Die Benutzung von Getter- und Settermethoden macht vor Allem Sinn wenn du mit private Variablen arbeitest. Sonst erstell doch einfach mal noch eine Klasse und erstelle dort eine Instanz deiner Playerklasse und versuche dann den Namen zu ändern.
Das ist hier aber nur so, weil die String-Klasse immutable ist. Vlt. hat er sich einfach nur ein doofes Beispiel ausgesucht. Angenommen String wäre nicht immutable und hätte auch wieder ein set-Methoden, könnte ich item schon über die get-Methoden verändern. Vlt. ist genau das gemeint?! Wenn man dies verhindern möchte/muss, muss man eben seine eigene Klasse auch immutable machen und zusehen, dass man keine Referenzen zu Objekten herausgibt die selbst nicht auch immutable sind. A Strategy for Defining Immutable Objects (The Java™ Tutorials > Essential Classes > Concurrency)
Sorry, habe den Satzfehler irgendwie nicht gesehen.
Ich verstehe euch schon, aber ich meine damit, dass ich ja mit den Methoden der Referenz, die ich mit der Get Methode bekomme das private Attribut bearbeiten kann.
Zum beispiel beim String einen bestimmten bereich löschen oder so...
Get Methoden sind doch eigentlich nur zum lesen und nicht zum schreiben da oder?
Du kannst die Referenzen bearbeiten, ja. Bei Klassen die mutable also veränderbar sind. Bei String ist das aber nicht der Fall. Der ist nämlich immutable.
In jedem Fall kannst du die bekommene Referenz nicht durch eine andere ersetzen.
Sicher/Unsicher wir reden hier ja nicht über Security. Private usw sollen ja nur helfen damit man keinen blödsinn macht. Möglichkeiten das zu umgehen gibt es immer wieder...