2016-08-19 1 views
-1

Ich habe eine Klasse von Objekten namens Artikel, aber die Klon-Funktion wird nicht funktionieren.Warum funktioniert mein Klon nicht? Java

Item newItem = addedItem.clone(); 

bitte helfen: '(

hinzugefügt:.

public abstract class Item extends GameObjectsCls implements Cloneable 

Item newItem = (Item)addedItem.clone(); 

und hinzugefügt, um die öffentliche Methode Klon, aber jetzt ist für try catch-Anweisung gefragt ist, dass ok öffentliche Object clone() throws CloneNotSupportedException {

+1

was bist du erwartet zu bekommen? – DimaSan

+0

"Wird nicht funktionieren" ist nicht sehr nützlich, um Hilfe auf dieser Website zu finden. Sie sollten mehr Details geben! – Renzo

+0

Haben Sie versucht, 'Item newItem = (Item) addedItem.clone();'? Implementiert 'Item'' Cloneable'? Das angeboten wird, ist "Cloneable" gebrochen (http://www.artima.com/intv/bloch13.html). – bradimus

Antwort

2

? Zuerst muss Ihre Item Klasse die Cloneable Schnittstelle implementieren oder andernfalls wird clone() eine Ausnahme auslösen erklärt in der documentation for Object#clone().

Zweitens muss Ihre Klasse eine öffentliche Version von clone() implementieren, da die clone()-Methode Objectprotected ist.

Schließlich müssen Sie möglicherweise das Ergebnis in eine Item umwandeln, damit die Zuweisung funktioniert, je nachdem, wie Sie in Klasse clone() in Klasse deklarieren.

EDIT (basierend auf OPs edit):

public class Item implements Cloneable { 
    ... 
    public Item clone() { 
     return (Item) super.clone(); 
    } 
} 

Es gibt keine Notwendigkeit zu erklären, dass es wirft CloneNotSupportedException, weil es nicht werden: Ihre clone() Methode wie folgt aussehen sollte.

Ich würde jedoch empfehlen, dass Sie clone() insgesamt nicht mehr verwenden und einfach eine Kopie Konstruktor implementieren:

public class Item { 
    public Item(Item other) { 
     // copy over relevant fields 
    } 
    // ... other constructors 
} 

Dann können Sie Ihre „Klon“ wie folgt erstellen:

Item newItem = new Item(addedItem);