2Danke
ERLEDIGT
JA
JA
ANTWORTEN
5
5
ZUGRIFFE
302
302
EMPFEHLEN
-
Hallo,
ich habe in meinem Lehrbuch den Satz "Achten Sie darauf, keine Zugriffsmethoden zu schreiben, die Referenzen auf veränderbare Objekte zurückgeben." gelesen. Als Beispiel wird nur gesagt, z.B. ein Objekt der Klasse Date.
Habe jetzt mal eine einfache Beispielklasse:
import java.util.*;
public class Test {
public Test(int jahr, int monat, int tag) {
GregorianCalendar kal = new GregorianCalendar(jahr, monat-1, tag);
this.tag = kal.getTime();
}
public Date getTag() {
return tag;
}
public static void main(String[] args) {
Test t1 = new Test(2007, 7, 26);
System.out.println(t1.getTag());
}
private Date tag;
}
Wieso sollte man das besser lassen.
Danke schiese
-
17.08.10 12:47 #2
- Registriert seit
- Jun 2007
- Ort
- Passau (Niederbayern)
- Beiträge
- 1.298
Hallo,
denke, dass die Aussage grundsätzlich einmal übertrieben ist. Manchmal ist es gewünscht, nur Referenzen zurückzugeben damit eine andere Klasse damit arbeiten kann.
Als Beispiel hier die Methode getContentPane() von einem JFrame, welche dir den sichtbaren Bereich des Fensters zurückgibt.
Jedoch würde es ja grundsätzlich der Sichtbarkeit wiedersprechen, wenn man private-Objekte über eine public-Get-Methode abrufen könnte.
Von daher denke ich, dass man Grundsätzlich dem Ansatz folgen sollte, es jedoch auch nicht schlimm ist, wenn man ihn unter gegebenen Umständen bricht.
Gruß
BKGeändert von Bratkartoffel (17.08.10 um 12:52 Uhr)
Über eine gute Bewertung freut sich jeder ;)
Bitte erledigte Threads als "Erledigt" markieren.
"Though a program be but three lines long, someday it will have to be maintained.''
-- Geoffrey James, "The Tao of Programming"
-
Vielen Dank für deine Antwort.
Ich hätte gedacht, dass es damit was zu tun hat, dass sich nachher mehrere Sachen aufs selbe Objekt beziehen und so Probleme entstehen können.
Werde den Abschnitt dann erst einmal überspringen.
schiese
-
17.08.10 13:17 #4
Ich hab den Satz mal gegooglet und bin darauf gestoßen: klick
Ich sag mal so: Es kommt drauf an, aber als Grundsatz würde ich das nicht verbuchen. In dem Beispiel der verlinkten Seite stimme ich dem Satz zu. Allerdings ist das ein Fall, wo man in der Regel automatisch explizit einen Klon erstellen würde, z.B. indem man ein neues Date-Objekt mit dem Timestamp des alten füttert. In der OOP ist es nunmal so, dass man Referenzen verwendet und mehrere Variablen nunmal auf das selbe Objekt verweisen können, das ist auch sinnvoll. Wozu soll man bei jeder Parameter-Übergabe oder Funktions-Rückgabe eine Kopie weiterreichen, damit stopft man nur den RAM und verschwendet Rechenleistung.
Wie gesagt, das hängt vom Fall ab und ich denke auch nicht, dass der Autor das wirklich ernst meinte. Ich denke eher, dass das ein Hinweis für Neulinge ist und sagen will: "Hey, pass mal auf. Wenn du eine Referenz weiterreichst und in dieser Daten änderst, dann werden in allen anderen Referenz-Variablen die Änderungen genauso wirksam, weil sie alle auf das selbe Objekt (bzw. die selbe Speicherstelle) verweisen und somit alle Referenzen davon betroffen sind."Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Vielen Dank, Akeshihiro.
Klonen ist auch das nächste Kapitel
-
18.08.10 10:42 #6
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 900
Kleiner Einwurf:
Was bei String (und Date) zum Beispiel umgesetzt wird ist das immutable Pattern (oder wie das heißt). Daher eine Klasse die man nicht mehr ändern kann, sondern nur beim Initialisieren die Werte bestimmt.
Dabei braucht man Dinge wie der hashCode nur einmal berechnen.Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
Ähnliche Themen
-
C/C++ Anfängerfrage
Von mazzaker im Forum C/C++Antworten: 10Letzter Beitrag: 13.11.07, 14:19 -
Java Socket: Objekte, Datei und dann wieder Objekte Übertragen
Von undertaker im Forum JavaAntworten: 2Letzter Beitrag: 27.06.07, 10:57 -
mal ne anfängerfrage
Von Phalax im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 1Letzter Beitrag: 27.05.05, 06:42 -
Anfängerfrage
Von kmf im Forum PHPAntworten: 3Letzter Beitrag: 11.04.05, 09:42 -
Objekte selektieren und Objekte einfärben
Von wal im Forum Cinema 4DAntworten: 4Letzter Beitrag: 09.02.04, 18:00





Zitieren

Login




