说我有一个类:通过反射获取一个类的公共静态最终字段/属性的值在Java中
public class R {
public static final int _1st = 0x334455;
}
我怎样才能获得通过反射的字段/属性“_1st”的价值?
说我有一个类:通过反射获取一个类的公共静态最终字段/属性的值在Java中
public class R {
public static final int _1st = 0x334455;
}
我怎样才能获得通过反射的字段/属性“_1st”的价值?
首先检索该类的字段属性,然后可以检索该值。如果知道类型,可以使用其中一个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::getIdentifier
认为这可能救人一段时间。尽管他们对文件表示不鼓励,但这并不令人感到意外。
'R._1st'无法正常工作?如果你正在谈论Android的开发,我认为'R'类总是在那里...... – Matthieu 2015-04-23 15:03:00
@Matthieu我也这么认为,直到今天,我必须做同样的事情,但只有'BR'类。 – Sevastyan 2017-11-08 16:08:57