2013-11-14 2 views
0

이 질문에 대한 코멘트 : A 'for' loop to iterate over an enum in Java 상태 :컴파일러 암시 적 메서드 란 무엇입니까?

@jacktrades : 그것은 단지 컴파일러에 존재하는 암시 적 방법이다. 따라서 기본 클래스는 같은 이름을 가진 메서드를 선언 할 수 없으므로 자동으로 생성 된 Javadocs에 포함되지 않습니다. docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2 - 의 Torben 3월 5일

이 방법 만 존재하기 때문에 9시 32분에서 컴파일러는 jdk1.5에서 사용할 수있는 Enum 개체 becames 이전에 존재했음을 의미합니까? 이 메서드는 컴파일러 인 다른 개체에 대해서만 존재합니까? java.util.Map은 values ​​() 메소드를 포함하고 있지만 이것은 문서화되어 있으므로 명시 적입니까? 이 메서드 .values를 암시 적으로 정의하는 이유는 이것이 Enum 형식에서 유용한 메서드이므로 Enum 개체 형식에서 명시 적으로 사용할 수 있어야합니다.

답변

2

이 메서드는 컴파일러에만 존재하므로 jdk1.5에서 사용할 수있는 Enum 개체 becames 이전에 존재 했습니까?

아니,이 방법은 컴파일러 다른 개체에 대한

자바 5

을 위해 존재 하는가 추가되었습니다. java.util.Map은 values ​​() 메소드를 포함하고 있지만 이것은 문서화되어 있으므로 명시 적입니까?

다른 점입니다. Map.values()은 일반적인 방법으로 Map 인터페이스의 일부입니다. 모든 enum 유형에 대해 values ​​()는 정적 메소드입니다. 중요한 차이점은 정적 메소드가 상속되지 않는다는 것입니다. 따라서 values()을 java.lang.Enum에 추가하는 것이 도움이되지 않았을 것입니다. 다른 내재적 인 방법은 [EnumType].valueOf(String name)입니다.

이 메서드는 .values를 암시 적으로 정의하는 이유는 이것이 Enum 형식에서 유용한 메서드이므로 명시 적이어야합니다.

정적 메서드가 상속되지 않으므로 다시 명시 할 수는 없습니다. valueOf의 경우 이라는 아날로그 방법이 java.lang.Enum에 있습니다. 거기에 values(class<T> type)이없는 이유는 확실하지 않습니다. 그것은 나에게 의미가 있었을 것이다. 그러나 대신에 동일한 일을하는 Class.getEnumConstants()가 있습니다.

+0

'Class.getEnumConstants()'가 있습니다. – immibis

+0

@immibis 맞습니다. 안으로 편집하겠습니다. –

관련 문제