كيفية استخدام انعكاس 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