2012-03-31 4 views
0
  1. 누군가이 (getClass()) 메소드를 재정의해야 할 수 있습니까? 실제로 어떤 목적으로 해결할 수 있을까요?오브젝트 반사 정보는 어디에 저장됩니까?

  2. Java 설명서에 다음과 같이 표시되어 있습니다. By convention, the returned object should be obtained by calling super.clone. If a class and all of its superclasses (except Object) obey this convention, it will be the case that x.clone().getClass() == x.getClass(). 왜 이것이 사실입니까? 이 진실은 무엇을 가지고 있나? 어떤 유형의 객체인지 알고있는 정보는 어디에 저장됩니까? 이게 어떻게 작동합니까?

죄송합니다.이 질문을 삭제 했으므로 삭제하면 안됩니다. 나는 그것을 편집하려고했다. 다시는 일어나지 않을 것이다.

편집 : 나는 문서를 오해, 그것은 최종 X- (하지만, 난 여전히 두 번째 질문을 부탁드립니다

답변

1

개체의 반사 정보는 어디에 저장됩니까?

클래스에서.

누군가가이 (getClass()) 메소드를 재정의해야합니까? 무슨 목적은 실제적으로 해결할 수 있습니다.

getClass()은 최종본이므로 아무런 목적도 없어 재정의 할 수 없으므로 실제로 발생할 수있는 문제는 아닙니다.

왜 이것이 사실입니까?

Object.getClass() 때문에 수익률이 켜져라고되고 Object의 클래스 Object.clone() 그것이에 호출 된 것과 같은 클래스의 객체를 반환하고 있기 때문에 super.clone() 호출 체인은 Object.clone()에서 종료 때문입니다.

+0

나는 아직도 그것에 대해 약간 혼란 스럽다. 연쇄가 관련되지 않은 경우 왜 동일한 클래스를 반환하지 않을 가능성이 있습니까? – rubixibuc

+0

@rubixibuc'new Object()'를 반환하는 체인 어딘가에'clone()'을 구현 한 경우 어떻게 될지 생각해보십시오. 그것은'clone()'의 의미를 만족시킬 것이지만, 그 밖의 모든 것을 깨뜨릴 수 있습니다. – EJP

+0

그래서 계층 구조의 개체 부분에 저장된 정보와 관련이 없습니까? 그것도 당신이 그것이 여전히 보장되지 않을 수도 의미를 만족한다고 말하는 것처럼 보인다? – rubixibuc

2

getClass 방법은 public final입니다 그것은 재정의 할 수 없습니다 clone를 사용

.. 확실히 좋은 방법이 아닙니다.

내가 자바 문서는 클론의 구현을 변경하지 마십시오입니다 무슨 말을 생각합니다. 당신이 복제를 오버라이드 (override) 같은 구현을 유지하는 super.clone를 사용하는 경우.

,

구현을 변경하지 않으면 무시점은 무엇입니까? 로깅을 추가 할 수 있습니다. protected에서 public까지 풀 수 있습니다. 등

구현을 변경하지 않으면 해당 속성을 분명히 보장하는 표준 구현을 갖게됩니다. 반면에 구현을 변경하면 모든 베팅이 해제됩니다.

+0

매우 슬프지만, 나는 깨닫지 못했다. 그러나 나는 아직도 두 번째 부분을 찾고 싶다. – rubixibuc

관련 문제