java - 枚举反射

标签 java reflection enums

我尝试在反射中制作这一行,但未能制作EnumTitleAction.SUBTITLE:

new ClassA(EnumB.SUBTITLE, "Test");

如何做到这一点?

我已经尝试这样做:

Class.forName("net.something.ClassA").getConstructors()[1].newInstance(/*Stuck with EnumB*/, "Test");

但我不知道如何用反射来表示 EnumB 部分。

最佳答案

枚举值是对象 - 只需像在第一个代码段中那样使用它即可:

Class.forName("net.something.ClassA").getConstructors()[1].newInstance
    (EnumB.SUBTITLE, "Test");

编辑:
根据下面的评论,问题是通过反射获取枚举常量。解决方法是使用 Class.getEnumConstants() 。如果您知道 SUBTITLESEnumB 中的位置,这相当简单:

Class.forName("net.something.ClassA").getConstructors()[1].newInstance
    (Class.forName("net.something.EnumB").getEnumConstants()[4], "Test");

但正如您可能怀疑的那样,这种编码风格非常脆弱。 更好的方法是根据名称找到它:

Class clazz = Class.forName("net.something.EnumB");
Method nameMethod = clazz.getMethod("name");
Object value = null;
Object[] enums = clazz.getEnumConstants();

for (Object o : enums) {
    if (nameMethod.invoke(o).equals("SUBTITLE")) {
        value = o;
        break;
    }
}
Class.forName("net.something.ClassA").getConstructors()[1].newInstance
    (value, "Test");

关于java - 枚举反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27201802/

相关文章:

java - 使用正则表达式从包含换行符的文本中解析字符串

ruby - 如何编写可通过插件扩展的 ruby​​ 应用程序

c++ - 如何存储类似库存的数字列表?

function - Haskell - 类型、枚举和函数

powershell - 如何将自定义 COM 枚举指定为 PowerShell 方法参数

java - JPackage在创建DMG之前将文件复制到应用程序的Resource文件夹中

java - Youtrack 6 重启在 Fedora 和 Java Service Wrapper 上失败

Java - 从HashMap单键多值取键(反向映射)

c# - 如何获取 System.Exception 的内部 "message"值?

c# - 如何在 C# (.NET 2.0) 中获取给定 TableAdapter 和 SqlDataAdapter 的 Sql 命令对象