2016-08-19 44 views
-1

我有一個叫做item的對象類,但克隆函數不起作用。爲什麼我不能克隆工作。 Java

Item newItem = addedItem.clone(); 

請幫助:'(

補充說:

public abstract class Item extends GameObjectsCls implements Cloneable 

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

,並增加了公衆的克隆方法,但現在我問一個try catch語句是確定公共Object clone() throws CloneNotSupportedException {

+1

你是什麼期待得到? – DimaSan

+0

「無法使用」在本網站上找到一些幫助並不是很有用。你應該提供更多細節! – Renzo

+0

你試過了嗎?Item newItem =(Item)addedItem.clone();'? 'Item'是否執行'Cloneable'?這是提供,['克隆'是打破](http://www.artima.com/intv/bloch13.html)。 – bradimus

回答

2

?首先,您的Item類需要實現Cloneable接口,否則clone()會引發異常。在documentation for Object#clone()中解釋。

其次,您的班級需要實施clone()的公開版本,因爲Objectclone()方法爲protected

最後,您可能需要將結果轉換爲Item,以便分配工作,具體取決於您在類Item中聲明clone()的方式。

EDIT(基於OP的編輯):您clone()方法應該是這個樣子:

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

有沒有需要聲明的是它拋出CloneNotSupportedException,因爲它不會。

我會然而建議,您停止使用clone()乾脆簡單地實現一個拷貝構造函數:

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

然後你就可以創建你的「克隆」這樣的:

Item newItem = new Item(addedItem);