2016-08-19 13 views
-1

私はアイテムと呼ばれるオブジェクトのクラスを持っていますが、クローン関数は機能しません。なぜ私のクローンの仕事はありません。 Java

Item newItem = addedItem.clone(); 

助けてください: '(

が追加さ:

public abstract class Item extends GameObjectsCls implements Cloneable 

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

を、公共cloneメソッドを追加しましたが、今のtry catch文を求めていますそのOK公共Object clone() throws CloneNotSupportedException {

+1

あなたが何を取得する予定ですか? – DimaSan

+0

「うまくいきません」は、このサイトのヘルプを見つけるのにはあまり役に立ちません。詳細を述べるべきです! – Renzo

+0

'Item newItem =(Item)addedItem.clone();'を試したことがありますか? 'Item'は' Cloneable'を実装していますか?それが提供されている、[Cloneableは壊れている](http://www.artima.com/intv/bloch13.html)。 – bradimus

答えて

2

です。?まず、ItemクラスでCloneableインターフェイスを実装する必要があります。そうしないと、clone()が例外をスローします。 documentation for Object#clone()で説明されている。

clone()メソッドObjectprotectedであるため、クラスではclone()の公開バージョンを実装する必要があります。

最後に、Itemclone()の宣言に応じて、割り当てが機能するように結果をItemにキャストする必要があります。 (OPの編集に基づいて)

EDIT:

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

ことがないので、それはCloneNotSupportedExceptionをスローすることを宣言する必要は、ありません:あなたのclone()方法は次のようになります。

私はあなたが完全にclone()の使用を停止し、単にコピーコンストラクタを実装すること、ただし、推薦:

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

その後、あなたはこのようなあなたの「クローン」を作成することができます

Item newItem = new Item(addedItem); 
関連する問題