Programing

Enum의 values ​​() 메서드에 대한 설명서는 어디에 있습니까?

lottogame 2020. 5. 28. 07:54
반응형

Enum의 values ​​() 메서드에 대한 설명서는 어디에 있습니까?


열거 형을 다음과 같이 선언합니다.

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에서 볼 수 없습니다.

세 곳에서 문서화 됨 :

컴파일러는 열거 형을 만들 때 자동으로 몇 가지 특수한 방법을 추가합니다. 예를 들어, 선언 된 순서대로 열거 형의 모든 값을 포함하는 배열을 반환하는 정적 값 메서드가 있습니다. 이 메소드는 일반적으로 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는 추가했습니다.

노트:

  1. never use sex as a class name, it's difficult to read your code, we use Sex in Java

  2. when facing a Java puzzle like this one, I recommend to use a bytecode decompiler tool (I use Andrey Loskutov's bytecode outline Eclispe plugin). This will show all what's inside a class

참고URL : https://stackoverflow.com/questions/13659217/where-is-the-documentation-for-the-values-method-of-enum

반응형