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

2022-08-31 09:05:02

假设我有一堂课:

public class R {
    public static final int _1st = 0x334455;
}

如何通过反射获得“_1st”的值?


答案 1

首先检索类的字段属性,然后可以检索值。如果您知道类型,则可以使用其中一个具有 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
 R.class.getField("_1st").get(null);

异常处理留给读者作为练习。

基本上,您可以通过反射像任何其他字段一样获取字段,但是当您调用get方法时,您将传入空值,因为没有要操作的实例。

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


推荐