通过reflection获取Java中的一个类的公共静态final字段/属性的值
说我有一堂课:
public class R { public static final int _1st = 0x334455; }
如何通过reflection获得字段/属性“_1st”的值?
首先检索该类的字段属性,然后可以检索该值。 如果你知道types,你可以使用其中一个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);
例外处理留给读者作为练习。
基本上你可以通过reflection获得像其他任何其他字段,但是当你调用get方法时,由于没有实例需要执行,所以传入一个空值。
这适用于所有静态字段,不pipe它们是最终的。 如果该字段不是公共的,你需要首先调用setAccessible(true)
,当然SecurityManager必须允许所有这些。
我正在遵循相同的路线(查看生成的R类),然后我有这种可怕的感觉,这可能是在资源类中的一个函数。 我是对的。
find这个: Resources :: getIdentifier
以为这可能会节省一些时间。 虽然他们在文件中表示不鼓励,但这并不令人感到意外。