Seite 1 von 1

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

Verfasst: 10. Feb 2007 11:04
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());
}
}

Verfasst: 10. Feb 2007 11:29
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 ;)

Verfasst: 10. Feb 2007 11:35
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.

Verfasst: 10. Feb 2007 11:53
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.

Verfasst: 10. Feb 2007 11:56
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.