2012-02-23 5 views
4

열거 형에 열거 형 인스턴스가 있고 처음 인스턴스에 액세스하면 나머지 인스턴스도 모두 동시에 초기화됩니다. enum 인스턴스를 처음 액세스 할 때만 초기화 할 수 있습니까?열거 형 인스턴스의 Java 지연로드

+0

왜 그걸 원하니? –

+1

구체적인 사용 사례는 없지만 궁금한 점이 있습니다. enum 인스턴스를 만드는 데 많은 비용이 들지만 (인스턴스 생성 당 DB에서 무언가를 읽는다 고 말하면), 인스턴스가 생성 될 때만 인스턴스를 만드는 것이 더 바람직 할 수 있습니다 물었다. – shrini1000

+1

매우 구체적인 사례가 있습니다. 컴퓨터 비전 프로젝트에서 검색 할 이미지 개체가 있으면 열거 형을 저장해야합니다. 여러 번 검색 될 가능성이 높지만 응용 프로그램과 함께 초기화하지 않으려합니다. –

답변

8

기본적으로하지 않고는 더 이상 enum이 아닙니다. Enums are classes. 클래스가 처음 사용될 때 JVM에 의해로드되고 정적 초기화가 모두 수행됩니다. 열거 형 멤버를 설정하는 것은 정적 초기화이므로 모두 초기화됩니다.

4

사용 중에 인스턴스를 지연로드 할 수 있습니다. 즉, 생성자는 실제로 값 비싼 작업을 수행하지 않습니다. 이 열거 형의 메서드에서는 checkLoaded() 메서드를이 메서드가 필요한 메서드에 추가합니다. 이것은 그것이하는 것에 따라 모든 방법 일 필요는 없습니다.

+1

개발자는 스레드 안전성을 고려해야하지만 흥미로운 아이디어입니다. –