neues Objekt erzeugen

  • Themenstarter Themenstarter benj3939
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

benj3939

Gast
NewTool.makeTool(p.getWidth(),p.getHeight(),p.getTool());

Also ich will ein neues Objekt erzeugen mit den Daten des vorigen Objekte nur, dass das neue dann noch durch etwas verändert wird. Nur mir verändert es beide obwohl ich die methoden nur auf das NewTool
kann es sein das ich mit dem Aufruf nur eine Referenz lege und kein neues Objekt erzeuge?? kann ich mir nicht vorstellen
 
ohne Code kann darüber nur spekulieren,
dein Zitat ist nur sehr wenig davon

anzunehmen ist
P newP = NewTool.makeTool(p.getWidth(),p.getHeight(),p.getTool());
newP.change()
-> p geändert

tja, niemand verbietet makeTool(), einfach kein neues Objekt anzulegen sondern p zuzurückzugeben,
Test: new == p?


bei deinem wenig gepostenen Code ist gar
NewTool.makeTool(p.getWidth(),p.getHeight(),p.getTool());
p.change()
zu vermuten..

außerdem könnte p innerhalb von newP verankert sein, automatisch mit geändert werden oder gar gleiche innere Teile referenzieren

tausende Varianten sind möglich
 
Also so sieht mein makeTool funkion aus
Code:
class AsciiTool{
 void makeTool(int breite,int hoehe, char [][] Tool ) 
	 {
		this.breite=breite;
		this.hoehe=hoehe;
		this.Tool=new char [hoehe][breite];
		this.Tool=Tool.clone();
		

		
		
	 }

 // hier sind dann noch einige get und set Funktionen getHeigth, getWidth usw
}

wird einfach nur in private Variablen die Daten gespeichert und dann in der Klasse von ein paar getter Variablen zurückgegeben

wenn ich nun in einer andere Klasse und Funktion das mache
Code:
void exec(AsciiTool p){
           AsciiTool NewTool =new AsciiTool();

           NewTool.makeTool(p.getWidth(),p.getHeight(),p.getTool());

            NewTool.setPoint(x,y, zeichen) //hier verändert er aber nicht nur das Objekt newTool sondern auch das alte Objekt p, wie könnte ich das verhindern???

}
[/quote]
 
es ist also von meiner Liste
oder gar gleiche innere Teile referenzieren

clone() ist eine ungewisse Standard-Methode,
sie kopiert bei Arrays nur das Hauptarray, nicht alle weiteren enthaltenen Objekte

das char[][] Tool (Variablen klein schreiben!) ist aus gewisser Sicherweise ein eindimensonales Array von Objekten X, wobei X hier char[]-Objekte sind

clone() erstellt ein neues Array, fügt dort aber all die char[] aus dem Original-Tool ein

damit benutzen beide char[][] dieselben vielen char[], änderst du eines, änderst du auch das andere

kopiere das char[][] lieber traditionell mit einer doppelten for-Schleife
oder zumindest ist es nötig, mit einer einfachen for-Schleife alle enthaltenen char[] einzeln zu clonen()

oder schreibe dir eine allgemeine Methode deepCopy, die autmoatisch alles kopiert
(Vorsicht wenn sehr große Datenstrukturen dranhängen, vielleicht sogar Kreis-Referenzen)

oder verwende Serialisierung zum Kopieren, auch unter Deepcopy geführt:
http://www.informatik-student.de/2006/12/10/deep-copy-von-java-objekten/
 
wow okay danke das war

eine frage habe ich noch ich habe Exceptions eingebaut

Code:
if(line.length() !=breite)
				{
					throw new AsciiException("FALSCHE EINGABE");
				}
Code:
class AsciiException extends Exception{

	AsciiException(String message)
	{
		System.out.println(message);
		
	}
	
}

folgendes meine Ausgabe sieht dann am Bildschirm so aus
Code:
FALSCHE EINGABE
Exception in thread "main" AsciiException
	at AsciiReader.main(AsciiReader.java:24)
Ich will aber das nur "FALSCHE EINGABE" ausgegeben wird wie kann ich den restlichen blödsinn unterdrücken
 
in der main oder an sonstiger wichtiger Stelle
try {
..
} catch (Exception oder nur AsciiException e) {
// nix tun
}

nicht zu empfehlen!!
 
kann ich nicht machen muss ne eigene Exception klasse verwenden. Is so Vorgabe
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben