열거 유형이 클래스 일 때 Java 반사를 사용하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/140537

  •  02-07-2019
  •  | 
  •  

문제

나는 상수가 수업 인 열거를 사용하고있었습니다. 상수에 대한 메소드를 호출해야했지만 컴파일 시간 종속성을 소개 할 수는 없었으며 런타임 (옵션 설치의 일부)에서 열거를 항상 사용할 수있는 것은 아닙니다. 따라서 반사를 사용하고 싶었습니다.

이것은 쉽지만, 나는 전에 열거와 반사를 사용하지 않았다.

열거는 다음과 같이 보였습니다.

public enum PropertyEnum {

  SYSTEM_PROPERTY_ONE("property.one.name", "property.one.value"),

  SYSTEM_PROPERTY_TWO("property.two.name", "property.two.value");

  private String name;  

  private String defaultValue;

  PropertyEnum(String name) {
    this.name = name;
  }

  PropertyEnum(String name, String value) {
    this.name = name;
    this.defaultValue = value;
  } 

  public String getName() {
    return name;
  }

  public String getValue() {
    return System.getProperty(name);
  }

  public String getDefaultValue() {
    return defaultValue;
  }  

}

반사를 사용하여 상수의 방법을 호출하는 예는 무엇입니까?

도움이 되었습니까?

해결책

import java.lang.reflect.Method;

class EnumReflection
{

  public static void main(String[] args)
    throws Exception
  {
    Class<?> clz = Class.forName("test.PropertyEnum");
    /* Use method added in Java 1.5. */
    Object[] consts = clz.getEnumConstants();
    /* Enum constants are in order of declaration. */
    Class<?> sub = consts[0].getClass();
    Method mth = sub.getDeclaredMethod("getDefaultValue");
    String val = (String) mth.invoke(consts[0]);
    /* Prove it worked. */
    System.out.println("getDefaultValue " + 
      val.equals(PropertyEnum.SYSTEM_PROPERTY_ONE.getDefaultValue()));
  }

}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top