clone - Methode zeigt: Type mismatch: cannot convert ...

tmx-master
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 253
Registriert: 25. Okt 2006 17:44

clone - Methode zeigt: Type mismatch: cannot convert ...

Beitrag von tmx-master »

Hi zusammen,

ich habe ein Problem:

Wenn ich die Methode clone() benutzen will, bekommen ich bei JEDER Zuweisung eine Fehlermeldung : Type mismatch: cannot convert from Object to ...

Ich habe auch ein kleines Testprogramm gemacht, in den das klar wird. Es sollte eigentlich funktionieren und ist ja für die Übung 12 an einigen Stellen wichtig. Ohne clone() kann ich einfach die Anforderungen nicht umsetzen.

Kennt jemand das Problem (ich benutze Eclipse, da taucht der Fehler natürlich auch auf)?
Testprogramm:
public class TestClone {
private int test;
public TestClone(){
test = 100;
}
private int getTest(){
return test;
}

public static void main(String[] args) {

TestClone test = new TestClone();
System.out.println("Object Test: " + test.getTest());

TestClone c = test.clone();
System.out.println("Object c (Clone): " + test.getTest());
}
}

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Beitrag von MisterD123 »

du müsstest das clone-objekt auf IntMatrix casten:

IntegerMatrix foo = (IntMatrix)m.clone;

und ich weiß nicht, ob das ganze funktioniert, denn die clonefunktion wurde für die matrix nicht überschrieben, ich wäre mir nicht sicher, dass clone ohne genauere angaben jedes objekt duplizieren kann. Die matrix manuell verdoppeln ist denke ich die sicherere methode ;)

tmx-master
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 253
Registriert: 25. Okt 2006 17:44

Beitrag von tmx-master »

Hi,

danke erst mal. Habe gleich mal eingesetzt:
IntegerMatrix temp = (IntegerMatrix)this.clone();

-> Fehlermeldung verschwindet ! Super!

Aber: clone müsste eigentlich jedes Object richtig kopieren, solange das Zielobjekt dem Typ entspricht, also:
IntegerMatrix temp = this.clone(); // wobei this ein Typ IntegerMatrix ist.

Ich probiere jetzt mal den Code komplett so durch und kann ja noch mal berichten, wenn keinen Besonderheiten mehr auftreten.

tmx-master
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 253
Registriert: 25. Okt 2006 17:44

Beitrag von tmx-master »

Ok, nächstes Problem:

java.lang.Error: Unresolved compilation problem:
Unhandled exception type CloneNotSupportedException

bei: IntegerMatrix temp=(IntMatrix)this.clone();

Muss ich jetzt diese Exception berücksichtigen?

Ich weiß ja nicht, aber ich schlage mich jetzt Stunden mit dem Problem rum ohne Lernerfolg. trail - and - error - Prinzip!!! Das kann´s ja wohl nicht sein.

citta
Mausschubser
Mausschubser
Beiträge: 96
Registriert: 7. Nov 2006 21:52

Beitrag von citta »

Beim Benutzen der Funktion müsste eine CloneNotSupportedException kommen, da das nur bei Klassen funktionieren sollte, die das Interface Clonable implementieren.
Außerdem gibt es ein Problem, wenn du Objekte klonst, die Referenzen zu veränderlichen Objekten haben, da Java nur flach kopiert, d.h. es werden keine neuen Objekte für die Referenzen innerhalb eines Objekts erzeugt. In diesem Beispiel ist das schlecht, weil sowohl das Originalobjekt als auch deren Kopie auf das gleiche Array zeigen. Änderst du das Array am Originalobjekt, wirkt sich das auch auf deren Kopie aus, damit ist der Sinn in unserem Falle nicht erfüllt, da ein Vergleich immer true ergeben würde.

Siehe:
http://java.sun.com/j2se/1.5.0/docs/api ... html#clone()
6.11.4 Klonen eines Objekts mit clone() im Java-Insel Buch, unten

Lösung ist wie gesagt das manuelle Kopieren.

Antworten

Zurück zu „Archiv“