문제

왜 그렇지 않았습니다 .clone() 에 지정된 메소드 java.lang.Cloneable 상호 작용 ?

도움이 되었습니까?

해결책

기본적으로 인터페이스가 깨진 인터페이스입니다. Ken Arnold와 Bill Venners가 논의했습니다 자바 디자인 문제.

아놀드 :

이 시점에서 내가 신이되어야한다면 많은 사람들이 아마 기뻐하지 않을 것입니다. Cloneable 그리고 Copyable, 왜냐하면 Cloneable 문제가 있습니다. 철자가 잘못되었다는 사실 외에 Cloneable 포함하지 않습니다 clone 방법. 즉, 무언가가 인스턴스인지 테스트 할 수 없습니다. Cloneable, 캐스트 Cloneable, 호출 clone. 반사를 다시 사용해야합니다. 그것은 단 하나의 문제 일 뿐이지 만 확실히 해결할 문제입니다.

다른 팁

Java Bugs 데이터베이스 에서이 버그를 참조하십시오.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4098033

본질적으로, 이것은 이전 버전의 Java의 설계 결함으로, 복제 가능한 인터페이스에서 수정하려고하지 않기 때문에 기존 코드와의 호환성을 깨뜨릴 수 있습니다.

Java에는 마커 인터페이스의 개념이 있습니다. 그만큼 Cloneable 인터페이스에는 방법이나 필드가 없으며 복제 할 수있는 의미를 식별하는 데만 사용됩니다.

~로부터 Dev-X 웹 사이트 :

종종 행동이없는 Java의 인터페이스를 발견하게됩니다. 다시 말해, 그것들은 빈 인터페이스 정의 일뿐입니다. 이를 마커 인터페이스라고합니다. Java API의 마커 인터페이스의 일부 예는 다음과 같습니다.

내가 작업하는 프로젝트에서 우리는 publicclonable이라는 인터페이스를 만들었으며 클론 방법이 포함되어 있으며 공개임을 지정합니다.

나는 이것이 유용하다고 생각한다 : 복제 방법이 있다는 사실이지만, 접근 할 수 없다는 사실은 그다지 도움이되지 않습니다.

public interface PublicCloneable extends Cloneable {
    public Object clone();
}

클론 방법은 "특별한"조건으로 인해 객체 클래스에서 구현되므로 모든 종류의 객체의 메모리 사본.

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