Java의 클로닝 가능한 인터페이스 및 Object.clone ()에 대한 혼란

StackOverflow https://stackoverflow.com/questions/1067383

  •  21-08-2019
  •  | 
  •  

문제

만약 내가 가지고 있다면:

class foo implements Cloneable

그리고 다음 :

bar = new foo();
bar.clone();

나는 글을 쓰지 않고 얕은 사본을 얻는다 bar.clone() 인터페이스를 구현할 때 일반적으로 수행 해야하는 코드.

내 이해는 인터페이스의 기능을 구현하는 클래스에 의해 작성되어야한다는 것입니다. Object.clone() 구현이 없습니다 (문서에 따르면 "클래스 객체 자체가 복제 가능한 인터페이스를 구현하지 않습니다").

그래서 내 얕은 클론은 어디에서 왔습니까? 구현하는 코드는 어디에 있습니까? bar.clone() 만약에 Object.clone() 구현이 없습니까? 나는 혼란 스럽다.

도움이 되었습니까?

해결책

~이다 매우 조심합니다 클론 사용. 사실, 나는 그것을 완전히 피할 것입니다. 나는 가지고있다 절대 필요했습니다. 그러나 ... 내가 읽은 주제에 대한 가장 좋은 논의는 효과적인 Java에서 Joshua Bloch의 것입니다. 항목 11을 읽으십시오 : "클론을 신중하게 무시하십시오".

자신에게 호의를 베풀고 그 항목을 읽으십시오. 실제로 그 전체 장 (그리고 나머지 책)을 읽는 것이 좋습니다. 클론에 대해 알아야 할 모든 것과 내가 왜 당신에게 그것에 대해주의를 기울이는지에 대해 알아야합니다.

도움이 되었기를 바랍니다.

다른 팁

Object.Clone ()은 구현이 있습니다.

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/object.html#clone ()

이 링크는 복제 가능한 인터페이스를 설명합니다.http://java.sun.com/j2se/1.5.0/docs/api/java/lang/clonable.html

객체는 clone () 메소드를 호출하려면 클로닝 가능한 인터페이스를 구현해야합니다. 그렇지 않으면 clonenotsupportedException을 던집니다.

정의에 따라 Java의 모든 클래스는 기본 객체 클래스를 확장하고 객체 자체는 클로닝 가능성을 구현하지 않더라도 기본 클론 () 메소드가 있습니다. 객체 클래스의 클론 () 메소드는 직접 무시하지 않으면 호출됩니다.

내가 가지고 있다면 : "클래스 푸우는 복제 가능"

그리고 다음 : bar = new foo (); bar.clone ();

인터페이스를 구현할 때 일반적으로 해야하는 것처럼 bar.clone () 코드를 작성할 필요없이 얕은 사본을 얻습니다.

.clone () 메소드가 상속 되었기 때문에 클래스 "foo"내에서 호출하는 경우에만 작동합니다. Object 보호됩니다.

내 이해는 인터페이스의 함수를 구현하는 클래스에 의해 작성되어야한다는 것입니다. Object.clone ()는 구현이 없습니다 (문서에 따라 "클래스 객체 자체가 인터페이스 클로닝 가능성을 구현하지 않습니다").

(1) Object.clone() 구현이 있습니다. 물체가 구현되면 물체의 얕은 사본을 만듭니다. Cloneable. (2) .clone() 메소드는 인터페이스의 일부가 아닙니다. (3) a .clone() 방법 및 구현 Cloneable 인터페이스는 완전히 분리 된 것입니다. 당신은 만 구현하면됩니다 Cloneable 사용하려는 경우 인터페이스 Object'에스 clone 방법; 그러나 이것은 권장되는 방법입니다. clone 수업 방법 - 슈퍼 클래스에서 사본을 얻는 방법 clone 결국 다가오는 방법 Object'에스 clone 방법.

내 이해는 인터페이스의 함수를 구현하는 클래스에 의해 작성되어야한다는 것입니다. Object.clone ()는 구현이 없습니다 (문서에 따라 "클래스 객체 자체가 인터페이스 클로닝 가능성을 구현하지 않습니다").

말 사이에는 차이가 있습니다 Object.Clone ()은 구현이 없으며 클래스 객체 자체가 클로닝 가능한 인터페이스를 구현하지 않습니다.

Object의 클론 방법에는 구현이 있으며 클론 방법을 불리는 객체의 메모리 카피를 수행합니다.

당신은 옳고, 객체 클래스는 복제 가능성을 구현하지 않으며, 객체가 복제 할 수 있는지 확인하는 것입니다.

위의 답변 포인트는 당신의 책을 읽는 것입니다. 나는 당신의 질문에 답하기 위해 빠른 해결책을 줄 수 있다고 생각합니다.

그래서 내 얕은 클론은 어디에서 왔습니까?물체의 클론 방법

Object.Clone ()가 구현이없는 경우 bar.clone ()을 구현하는 코드는 어디에 있습니까?기본 코드로 작성된 구현이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top