假设您有一个文本文件,例如:
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 //...
}
问题是:应该有什么呢?给定其String表示形式,甚至可以实例化未知枚举吗?
field.set(this, Enum.valueOf((Class<Enum>) field.getType(), value));
getClass()
之后getType()
不应该被调用-它返回Class
实例的类Class<Enum>
,避免一般性的问题,因为你已经知道的Class
是enum
问题内容: 当我阅读 Effective Java时 ,作者告诉我,单元素类型是实现单例的最佳方法,因为我们不必考虑复杂的序列化或反射攻击。这意味着我们无法创建使用反射的实例,对吗? 我已经做了一些测试,并在这里上课: 然后我尝试创建一个实例: 如您所知,它不起作用。当我更改关键字来,它的工作原理。我想知道为什么。谢谢。 问题答案: 这是语言内置的。根据Java语言规范(§8.9): 尝试显式实例
问题内容: 是否可以使用Java反射从另一个类实例化私有内部类。例如,如果我采用了这段代码 是否可以实例化并从main类中的main方法获得对Test的访问。 问题答案: 使用反射时,您会发现该内部类的构造函数将外部类的实例作为附加参数(总是第一个)。 例:
是否可以从类main中的main方法实例化并获得对Test的访问。
本文向大家介绍PHP 反射(Reflection)使用实例,包括了PHP 反射(Reflection)使用实例的使用技巧和注意事项,需要的朋友参考一下 PHP Reflection是用于获取类、扩展、方法、函数、对象、参数、属性的详细信息。 ReflectionClass类获取类相关信息,如获取属性、方法、文档注释等。 ReflectionExtension 类用于获取扩展相关信息 Reflec
问题内容: 考虑我有以下枚举类, 在下面的课程中,我试图测试枚举类, 在这里,我指定然后将其作为参数传递给方法。相反,如果我们要实例化枚举类并将其作为参数传递,我们需要做什么? 问题答案: 在这里,我需要指定Sample.READ以将其作为参数传递。相反,如果我们要实例化枚举类并将其作为参数传递,我们需要做什么? “实例化枚举类”甚至意味着什么?枚举的要点是有一组 固定 的值-您以后不能创建更多值
问题内容: 我正在使用reflect.MakeFunc编写函数。该函数可以返回错误。成功时,我希望它为错误类型的返回值返回nil。我该如何使用反射?目前我有这个: 我懂了。我也尝试添加一个之后,但我得到了。我尝试了,但出现了细分错误。 如何获得代表nil错误的reflect.Value? 问题答案: 使用以下内容: 让我们分解一下。第一步是为: 。更简单的方法不起作用,因为参数的具体值为。没有类型