假设我有一堂课:
public class R {
public static final int _1st = 0x334455;
}
如何通过反射获得“_1st”的值?
假设我有一堂课:
public class R {
public static final int _1st = 0x334455;
}
如何通过反射获得“_1st”的值?
首先检索类的字段属性,然后您可以检索值。如果您知道类型,则可以使用带有 null 的 get 方法之一(仅对于静态字段,实际上对于静态字段,传递给 get 方法的参数将被完全忽略)。否则,您可以使用 getType 并编写适当的开关,如下所示:
Field f = R.class.getField("_1st");
Class<?> t = f.getType();
if(t == int.class){
System.out.println(f.getInt(null));
}else if(t == double.class){
System.out.println(f.getDouble(null));
}...
R.class.getField("_1st").get(null);
异常处理留给读者作为练习。
基本上,您通过反射像其他任何字段一样获取该字段,但是当您调用 get 方法时,您传入一个 null,因为没有实例可以执行。
这适用于所有静态字段,无论它们是最终的。如果该字段不是公开的,您需要先调用setAccessible(true)
它,当然 SecurityManager 必须允许所有这些。
我遵循相同的路线(查看生成的 R 类),然后我有一种可怕的感觉,它可能是 Resources 类中的一个函数。我是正确的。
找到这个: Resources::getIdentifier
认为它可能会为人们节省一些时间。尽管他们在文档中表示不鼓励这样做,但这并不奇怪。