2016-08-19 3 views
-1

항목이라는 클래스의 클래스가 있지만 복제 기능이 작동하지 않습니다.왜 복제 작업을하지 않습니까? 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

"Will not work"는이 사이트에서 도움을 얻는 데별로 도움이되지 않습니다. 더 자세한 정보를 제공해야합니다! – Renzo

+0

'Item newItem = (Item) addedItem.clone();'시도해 보셨습니까? 'Item'은'Cloneable'을 구현합니까? 그것이 제공되면서, [Cloneable은 망가졌다.] (http://www.artima.com/intv/bloch13.html). – bradimus

답변

2

입니다 먼저 Item 클래스에서 Cloneable 인터페이스를 구현해야합니다. 그렇지 않으면 clone()이 예외를 throw합니다. documentation for Object#clone()에 설명되어 있습니다.

두 번째로 clone() 방법이 Object 인 경우 클래스는 protected이므로 공개 버전을 구현해야합니다. 할당이 작동하려면

마지막으로, 당신은 당신이 클래스 Itemclone()를 선언하는 방법에 따라 한 Item에 결과를 캐스팅해야 할 수도 있습니다. (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); 
관련 문제