java 反射 静态字段_通过反射获取Java中类的公共静态最终字段/属性的值

问题

说我有一节课:

public class R {

public static final int _1st = 0x334455;

}

如何通过反射得到字段/属性"_1st"的值?

#1 热门回答(101 赞)

首先检索类的字段属性,然后可以检索该值。如果你知道类型,则可以使用其中一个带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));

}...

#2 热门回答(48 赞)

R.class.getField("_1st").get(null);

异常处理留给读者练习。

基本上你通过反射得到的字段就像任何其他字段一样,但是当你调用get方法时,你传递的是null,因为没有实例可以作用。

这适用于所有静态字段,无论它们是最终的。如果该字段不公开,则需要先调用setAccessible(true),当然SecurityManager必须允许所有这些。

#3 热门回答(1 赞)

我遵循相同的路线(查看生成的R类)然后我有这种可怕的感觉它可能是Resources类中的一个函数。我是对的。

认为它可能会节省一些时间。虽然他们说它在文档中气馁,但这并不太令人惊讶。

你可能感兴趣的:(java,反射,静态字段)