열거 형을 다음과 같이 선언합니다.
enum Sex {MALE,FEMALE};
그런 다음 아래와 같이 열거 형을 반복하십시오.
for(Sex v : Sex.values()){
System.out.println(" values :"+ v);
}
Java API를 확인했지만 values () 메소드를 찾을 수 없습니까? 이 방법의 출처가 궁금합니다.
API 링크 :
https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html
답변
이 메소드는 컴파일러에 의해 추가 되었기 때문에 javadoc에서 볼 수 없습니다.
세 곳에서 문서화 됨 :
- Java 튜토리얼의 열거 형
컴파일러는 열거 형을 만들 때 자동으로 몇 가지 특수한 방법을 추가합니다. 예를 들어, 선언 된 순서대로 열거 형의 모든 값을 포함하는 배열을 반환하는 정적 값 메서드가 있습니다. 이 메소드는 일반적으로 for-each 구문과 함께 사용하여 열거 형 유형의 값을 반복합니다.
Enum.valueOf
클래스
(특별 암시 적values
메소드는valueOf
메소드 설명에 언급되어 있음 )
열거 형의 모든 상수는 해당 형식의 암시적인 public static T [] values () 메서드를 호출하여 얻을 수 있습니다.
이 values
함수는 단순히 열거의 모든 값을 나열합니다.
답변
이 메소드는 암시 적으로 정의됩니다 (즉, 컴파일러에 의해 생성됨).
로부터 JLS :
또한 유형
E
의 이름 인 경우enum
해당 유형에는 다음과 같이 암시 적으로 선언 된static
메소드가 있습니다./** * Returns an array containing the constants of this enum * type, in the order they're declared. This method may be * used to iterate over the constants as follows: * * for(E c : E.values()) * System.out.println(c); * * @return an array containing the constants of this enum * type, in the order they're declared */ public static E[] values(); /** * Returns the enum constant of this type with the specified * name. * The string must match exactly an identifier used to declare * an enum constant in this type. (Extraneous whitespace * characters are not permitted.) * * @return the enum constant with the specified name * @throws IllegalArgumentException if this enum type has no * constant with the specified name */ public static E valueOf(String name);
답변
이것을 실행
for (Method m : sex.class.getDeclaredMethods()) {
System.out.println(m);
}
당신은 볼 것이다
public static test.Sex test.Sex.valueOf(java.lang.String)
public static test.Sex[] test.Sex.values()
이것들은 모두 “섹스”클래스가 가지고있는 공개 메소드입니다. 그들은 소스 코드에 없으며 javac.exe는 추가했습니다.
노트:
-
섹스를 클래스 이름으로 사용하지 마십시오. 코드를 읽기가 어렵습니다. Java에서 Sex를 사용합니다.
-
이와 같은 Java 퍼즐에 직면 할 때 바이트 코드 디 컴파일러 도구를 사용하는 것이 좋습니다 (Andrey Loskutov의 바이트 코드 개요 Eclispe 플러그인 사용). 이것은 수업 안에있는 모든 것을 보여줄 것입니다