假设我在包Foo
中有一个类my.package
,其中包含一些静态字段。
我想使用反射来获取那些静态字段的值。
我知道我可以写my.package.Foo.class.getDeclaredField(...
但这并不令人满意,因为我正在对类和包名称进行硬编码。
我想使用this.class.getDeclaredField(...
,但即使从非静态成员函数中调用,这在Java中也是无效的。
有办法吗?
答案 0 :(得分:3)
每个类都继承实例方法Object#getClass()
。调用它来获取实例的相应Class
对象。
我不知道为什么你会在Foo
内执行此操作,因为Foo
已知道其static
字段,并且您可以直接在编译时访问它们。
答案 1 :(得分:0)
非静态地,您可以使用this.getClass()
获取当前类,如@sotirios-delimanolis所述。
静态地,你可以这样做,虽然它有点难看:
public static Class<?> getCurrentClassStatic() {
try {
return Class.forName(new Throwable().getStackTrace()[0].getClassName());
} catch (ClassNotFoundException e) {
return null; //Shouldn't happen...
}
}