IT Share you

Java Enums : 클래스의 열거 된 값 나열

shareyou 2020. 11. 16. 23:12
반응형

Java Enums : 클래스의 열거 된 값 나열


열거 형에 대한 클래스 개체가 있고 ( Class<? extends Enum>)이 열거 형으로 표시되는 열거 형 값 목록을 가져와야합니다. values정적 기능은 내가 필요로하는 것을 가지고,하지만 난 확실하지 클래스 객체에 대한 액세스 권한을 얻는 방법입니다.


Class.getEnumConstants


필요한 값의 이름을 알고있는 경우 :

     Class<? extends Enum> klass = ... 
     Enum<?> x = Enum.valueOf(klass, "NAME");

그렇지 않은 경우 다음과 같이 배열을 얻을 수 있습니다 (톰이 먼저했던 것처럼).

     klass.getEnumConstants();

리플렉션을 사용하는 것은 Class # getEnumConstants () 를 호출하는 것처럼 간단합니다 .

List<Enum<?>> enum2list(Class<? extends Enum<?>> cls) {
   return Arrays.asList(cls.getEnumConstants());
}

EnumSet#allOf()언급되지 않은 것을보고 놀랐습니다 .

public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)

지정된 요소 유형의 모든 요소를 ​​포함하는 열거 형 집합을 만듭니다.

다음을 고려하십시오 enum.

enum MyEnum {
  TEST1, TEST2
}

다음과 같이 메서드를 호출하면됩니다.

Set<MyEnum> allElementsInMyEnum = EnumSet.allOf(MyEnum.class);

물론,이 리턴한다 Set아니고는 List, 그러나 많은 (대부분?) 사용 사례에 충분합니다.

또는 알 수없는 경우 enum:

Class<? extends Enum> enumClass = MyEnum.class;
Set<? extends Enum> allElementsInMyEnum = EnumSet.allOf(enumClass);

에 비해이 방법의 장점 Class#getEnumConstants()은를 제외한 다른 어떤 것도 전달할 수 없도록 입력된다는 것입니다 enum. 예를 들어 아래 코드는 유효하며 다음을 반환합니다 null.

String.class.getEnumConstants();

이것이 컴파일되지는 않지만 :

EnumSet.allOf(String.class); // won't compile

참고 URL : https://stackoverflow.com/questions/1626901/java-enums-list-enumerated-values-from-a-class-extends-enum

반응형