gpt4 book ai didi

Java:使用反射实例化枚举

转载 作者:IT老高 更新时间:2023-10-28 20:39:33 25 4
gpt4 key购买 nike

假设你有一个像这样的文本文件:

my_setting = ON
some_method = METHOD_A
verbosity = DEBUG
...

您希望相应地更新相应的对象:

Setting my_setting = ON;
Method some_method = METHOD_A;
Verbosity verbosity = DEBUG;
...

所有这些都是不同类型的枚举。

我想要一种通用的方法来实例化枚举值。也就是说,在运行时使用反射,并且事先不知道对象的枚举类型。

我会想到这样的事情:

for (ConfigLine line : lines)
{
String[] tokens = line.string.split("=", 2);
String name = tokens[0].trim();
String value = tokens[1].trim();

try
{
Field field = this.getClass().getDeclaredField(name);
if(field.getType().isEnum())
{
// doesn't work (cannot convert String to enum)
field.set(this, value);
// invalid code (some strange generics issue)
field.set(this, Enum.valueOf(field.getType().getClass(), value));
}
else
{ /*...*/ }
}
catch //...
}

问题是:应该有什么代替?给定它的字符串表示,甚至可以实例化一个未知的枚举吗?

最佳答案

field.set(this, Enum.valueOf((Class<Enum>) field.getType(), value));
  • getClass()getType() 之后不应调用 - 它返回 Class 的类实例
  • 你可以投Class<Enum> ,以避免一般问题,因为您已经知道 Classenum

关于Java:使用反射实例化枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3735927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com