2015-01-20 3 views
2

소스 코드가 java.util.HashMap 인 동안 나는 init이라는 선언을 발견했습니다.java.util.hashMap의 init 메소드

하위 클래스의 초기화 훅. HashMap이 초기화되었지만 모든 항목이 삽입되기 전에 모든 생성자 및 의사 생성자 (clone, readObject)에서이 메서드가 호출됩니다. (이 방법이없는 경우, readObject는 서브 클래스의 명시적인 지식을 필요로한다.) 나는 In Java, is there a legitimate reason to call a non-final method from a class constructor?

하지만 여전히 나는 초기화의 목적과 이유를 readObject 무엇을 이해할 수 없습니다입니다 관련 질문을 발견

void init() { 
} 

하위 클래스에 대한 지식이 필요합니까? 어떤 사람이 예제로 설명 할 수 있겠습니까?

+0

IMHO - 잔여 의심 사항을 분명하게 밝히거나 답변을 수락하는 것이 좋습니다. –

답변

3

의견에 따르면, 이것은 하위 클래스의 초기화 훅입니다. 모든 하위 클래스는 이없는 초기화를 수행하기 위해 init()을 적절히 재정의 할 수 있으며 을 구현하고 clone()을 다시 구현해야하는 번거 로움없이을 구현해야합니다.

예를 들어, LinkedHashMap에서 init() 메서드는 연결된 목록을 설정하기 위해 재정의됩니다. init()을 사용할 수없는 경우 deserialize 할 때 발생할 수있는 부분을 생각해보십시오.

+0

HashMap이 최종 클래스 인 경우 다른보기 인 경우 init()가 필요하지 않습니다. 그러나 확장 할 수 있기 때문에 우리는 하위 클래스에 대해서도 신경 써야합니다. –

관련 문제