Rückgabe als Wert, keine Referenz

jGhost

Mitglied
Hallo Community,

wie gibt man bei Java den Rückgabewert so zurück, dass er keine Referenz mehr ist.

Das Java-Methoden immer Werte zurück geben und auch an nehmen und keine Referenzen wie bei C/C++ habe ich schon gegoogelt und auch verstanden.

Folgendes Beispiel:
Java:
package test;

import java.awt.Point;

class MyClass{
    private Point point;
    
    public MyClass(){
        point = new Point(10, 10);
    }
    
    public Point getPoint(){
       return point;       
    }
}

public class test{    

    public static void main(String[] args) {
        // TODO code application logic here
        
       MyClass myClass = new MyClass();
       
       System.out.println(myClass.getPoint());
       System.out.println();
       
       Point point2 = myClass.getPoint();
       point2.x = 100;
       
       System.out.println(myClass.getPoint());        
    }    
}

In Zeile 28 kann ich auf ein (private) Eigenschaft der Klasse zugreifen und verändern, über die Ausgabe. Wie kann ich das so ausgeben dass die Eigenschaft sicher ist.

Möglchkeit die ich gefundne habe:
Java:
    public Point getPoint(){
   return new Point(point);
}

Und was macht man bei einer Liste, soll die auch neu erstellen werden, ist das nicht zuviel Code?
Java:
class Turtle{
    private List<Point> shape;
    ...

    public List<Point> getShape(){
        ....
    }
}

Sorry für die Frage, bin neu bei Java, und Google gibt auch keine Antwort :D.
 

turtle

Top Contributor
public Point getPoint(){
return new Point(point);
}

Eine Klasse nennt man, wenn alle Operationen, die den Zustand ändern können, dies durch eine Rückgabe eines neuen Objektes bewerkstelligen, immutable.

Bei Collections (also auch Listen) geht das, indem man quasi eine unveränderbare Sicht liefert.
Java:
List unmodifiableList = Collections.unmodifiableList(aList);
 

jGhost

Mitglied
Ich will ja den Rückgabewert (später) verändern aber nicht die Eigenschaft des Objekts.

Ich zeichne ein Dreieck.
1. Die Koordinaten hole ich mir von dem Objekt (Dreieck).
2. Den Grad-Wert hole ich auch von dem Objekt (Dreieck).
2. Lasse sie dann rotieren. (Koordinaten werden verändert)
3. Anschliessend zeichne ich sie.

In meinem Fall will ich aber, dass die Koordinaten des Objekts nicht verändert werden, nur die Gran-Eigenschaft soll sich ändern. Die Koordinaten ändern sich schon, aber nur für die Zeichnung, bei der nächsten Zeichnung will ich wieder die Original-Koordinaten.

Das Porgramm ist mir nicht wichtig, ich könnte es auch anders lösen. Hab blos festgestellt dass mit dem Rückgabewert eines Obekts man diese Eigenschaft auch (indirekt) ändern kann auch wenn sie "private" ist. Bei C/C++ oder z.B. PHP geht das ja so nicht. Und deswegen interessiert es mit wie man in diesem Fall vorgeht: Der Rückgabewert (einer Eigenschaft) soll sich ändern aber die Eigenschaft selbst des Objektes nicht.
 

DrZoidberg

Top Contributor
Eine Möglichkeit wäre, dass deine getPoint Methode eine Kopie zurück gibt.(z.B. mit new Point(point) oder mir point.clone)
Die andere Option, die gerade bei mathematischen Grössen oder auch geometrischen Figuren besonders vorteilhaft ist, wäre deine Klasse immutable zu machen. Das heisst ein verändern ist grundsätzlich nicht möglich. Statt dessen liefert dann z.B. die "rotieren" Methode ein neues Objekt zurück.

Für Listen kann man diese Strategie auch gut anwenden, wenn man "persistente Datenstrukturen" verwendet. z.B. eine einfach verlinkte Liste. Da kann man dann sehr leicht eine veränderte Kopie erstellen ohne das Original zu verändern und ohne die Liste kopieren zu müssen, da sich die beiden Listen die Daten im Arbeitsspeicher teilen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Problem mit Rückgabe Wert von Methoden Java Basics - Anfänger-Themen 5
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
G Endlosschleife keine Rückgabe Java Basics - Anfänger-Themen 36
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
H Methode mit Array als Rückgabe This method must return a result of Type int[] Java Basics - Anfänger-Themen 2
Z Rückgabe eines Values in umgekehrte richtung Java Basics - Anfänger-Themen 5
M Rückgabe eines Arrays Java Basics - Anfänger-Themen 10
R Methode Rückgabe Java Basics - Anfänger-Themen 10
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
J Rückgabe-Problem Java Basics - Anfänger-Themen 10
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
N Best Practice Rückgabe eines Terminal Befehls in eine Variable speichern Java Basics - Anfänger-Themen 27
J Funktionen auf der Rückgabe eines Stacks (pop) Java Basics - Anfänger-Themen 6
karlmasutra Klassen Rückgabe eines Wertes aus einer anderen Klasse Java Basics - Anfänger-Themen 3
V Methoden Rekursive Methode mit String als Rückgabe Java Basics - Anfänger-Themen 7
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
S Rekursion Rückgabe - Türme von Hanoi Java Basics - Anfänger-Themen 16
F Konsolen Befehl ausführen und Rückgabe auswerten Java Basics - Anfänger-Themen 3
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
L Probleme bei Rückgabe eines Arrays in einer Methode Java Basics - Anfänger-Themen 47
L Frage zur Rückgabe von Werten bei Methoden Java Basics - Anfänger-Themen 4
P Rückgabe erflogt nicht als Double Java Basics - Anfänger-Themen 2
D Methoden ArrayList Rückgabe bringt komische Werte Java Basics - Anfänger-Themen 12
M Übergabe / Rückgabe Java Basics - Anfänger-Themen 6
A Rückgabe in for-Schleife Java Basics - Anfänger-Themen 2
I Rückgabe und Aufruf einer Methode innerhalb einer anderen Methode Java Basics - Anfänger-Themen 5
S Rückgabe-Array lässt sich nicht auslesen, LocalDate mit String Java Basics - Anfänger-Themen 3
G Methoden mehrdimonsionale Arrays als Rückgabe Java Basics - Anfänger-Themen 2
S Methode rückgabe wiederverwenden Java Basics - Anfänger-Themen 4
llabusch Methoden Rückgabe einer Methode verwerden Java Basics - Anfänger-Themen 1
S Methoden void-Methode: Wieso gibt es eine Rückgabe? Java Basics - Anfänger-Themen 5
R public static void Rückgabe Java Basics - Anfänger-Themen 5
H Array wird verändert ohne Rückgabe? Java Basics - Anfänger-Themen 7
S Rückgabe von einem Array Java Basics - Anfänger-Themen 7
M Serialize - Fehler bei Rückgabe von Objekt Java Basics - Anfänger-Themen 5
R CMD Rückgabe durchlesen Java Basics - Anfänger-Themen 14
W Rückgabe Methode mit Feld Java Basics - Anfänger-Themen 4
A Rekursion in Baum und ArrayList als Rückgabe Java Basics - Anfänger-Themen 2
N Rückgabe der Werte funktioniert nicht Java Basics - Anfänger-Themen 9
F Problem bei Rückgabe von StringBuffer aus Methode Java Basics - Anfänger-Themen 6
N HashMap fehlerhafte Rückgabe Java Basics - Anfänger-Themen 7
K Problem mit der Rückgabe Java Basics - Anfänger-Themen 3
R Rückgabe Array Java Basics - Anfänger-Themen 22
G Klasse überschreiben wenn Rückgabe über Methode Java Basics - Anfänger-Themen 6
M Methode mit Rückgabe Java Basics - Anfänger-Themen 2
D Maximum Subarray Problem; Problem mit der Rückgabe Java Basics - Anfänger-Themen 10
N Methoden und deren Rückgabe Java Basics - Anfänger-Themen 4
D Rückgabe einer Klasse Java Basics - Anfänger-Themen 20
H TreeMap Rückgabe - Compiler-Warnings Java Basics - Anfänger-Themen 9
M Rückgabe bei Exception Java Basics - Anfänger-Themen 4
H Rekursion und Rückgabe Java Basics - Anfänger-Themen 11
K Rückgabe aus Formular Java Basics - Anfänger-Themen 3
S HashMap: Rückgabe des key zu bestimmten value Java Basics - Anfänger-Themen 3
B "vollständige" Resultat Rückgabe Java Basics - Anfänger-Themen 8
G Problem mit der Rückgabe von einem Array Java Basics - Anfänger-Themen 3
A Beschreibung von Code und Rückgabe von Anzahl in ArrayList Java Basics - Anfänger-Themen 5
C Parameter rückgabe nach Prüfung an Klasse/Methode Java Basics - Anfänger-Themen 2
R Rückgabe vom ActionListener Java Basics - Anfänger-Themen 12
B JavaFilter true rückgabe Java Basics - Anfänger-Themen 23
S Rückgabe eines eingelesenen 2D Arrays aus Klasse heraus Java Basics - Anfänger-Themen 3
J datentyp -objectTyp Rückgabe Java Basics - Anfänger-Themen 2
zilti PHP-Script aufrufen und Rückgabe lesen Java Basics - Anfänger-Themen 2
G Array Rückgabe aus Programm Java Basics - Anfänger-Themen 6
0 Probleme bei Threads mit Rückgabe. Java Basics - Anfänger-Themen 6
C Rückgabe bei methoden Java Basics - Anfänger-Themen 2
S Probleme mit InputStream- Rückgabe Java Basics - Anfänger-Themen 4
G Warum ist die Rückgabe kein Integer? Java Basics - Anfänger-Themen 5
G Rückgabe Java Basics - Anfänger-Themen 6
G Rückgabe mehrdimensionales Array Java Basics - Anfänger-Themen 3
G Rückgabe einer Kopie bzw. Referenz Java Basics - Anfänger-Themen 22
G Rückgabe einer Methoden bei Schließen des Fensters Java Basics - Anfänger-Themen 3
M Rückgabe funktioniert nicht! Java Basics - Anfänger-Themen 4
F Rückgabe eines Array´s aus einer Methode Java Basics - Anfänger-Themen 3
M Rückgabe oder Parameter? Java Basics - Anfänger-Themen 5
H Konstruktor mit Rückgabe Java Basics - Anfänger-Themen 13
L Rückgabe Java Basics - Anfänger-Themen 4
D Rückgabe von Arrays Java Basics - Anfänger-Themen 6
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
A Negativ-Wert Java Basics - Anfänger-Themen 4
R finaler Wert in outerMethod von method in InnerMethodClass Java Basics - Anfänger-Themen 2
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Datum als Variable wert Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37

Ähnliche Java Themen

Neue Themen


Oben