动态加载Java Enum类和枚举常量

Jos*_*ick 1 java enums

我已经看过很多关于如何动态获取枚举值的StackOverflow帖子,因为你在编译时知道了Enum类,但我试图动态加载枚举类和枚举值,我没有看到如何做这个.

我正在尝试做这样的事情:

public interface Config {
    public ConfigValue getConfigValue();
}

public enum AwsConfig implements Config {
    ACCESS_KEY_ID( new ConfigValue(...) ),
    API_URL( new ConfigValue(...) )
    ...
    public static String getName() { return "AwsConfig"; }
    ...
}

public enum PaginatorConfig implements Config {
    DEFAULT_PAGE_SIZE( new ConfigValue(...) ),
    ...
    public static String getName() { return "PaginatorConfig"; }
    ...
}

public void myMethod( ConfigValue configValue ) {
    String enumClassName = configValue.getName();
    String enumConstantKeyName = configValue.getKey();

    // I now have the enum's class name as enumClassName
    // I now have the enum constant's name as enumConstantKeyName
    // How can I dynamically get the enum constant's configValue based on the enumClassName and enumConstantKeyName?

    // I know I can get the value dynamically if I know the Enum constant...
    ConfigValue configValue = AwsConfig.valueOf("API_URL")

    // But I wish I could do something like this...
    ConfigValue configValue = Enum.valueOf( "AwsConfig", "API_URL" );
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*ton 5

如果您知道(或可以弄清楚)要从中加载值的枚举的完全限定类名,则可以执行以下操作:

String enumClassName = "com.mycompany.MyEnum";
String enumConstant = "MyValue";

Class enumClass = Class.forName(enumClassName);
Object enumValue = Enum.valueOf(enumClass, enumConstant);

assert enumValue == MyEnum.MyValue; // passes
Run Code Online (Sandbox Code Playgroud)