Java 我们可以使用反射来获取类的静态成员,而不在对象实例上调用该方法吗?
我们可以使用反射来获取类的静态成员,而不在对象实例上调用该方法吗 换言之:Java 我们可以使用反射来获取类的静态成员,而不在对象实例上调用该方法吗?,java,class,reflection,Java,Class,Reflection,我们可以使用反射来获取类的静态成员,而不在对象实例上调用该方法吗 换言之: public class MuchoStatic { private static staticMember; getStaticMember(){ return this.staticMember; } } //end class 还有更多的代码: Method m = null; try{ m = MuchoStatic.class.getMethod("g
public class MuchoStatic {
private static staticMember;
getStaticMember(){
return this.staticMember;
}
} //end class
还有更多的代码:
Method m = null;
try{
m = MuchoStatic.class.getMethod("getStaticMember",null);
} catch (Exception e) {
}
Object o = null;
try{
o = m.invoke(MuchoStatic.class,null);
} catch (Exception e) {
}
我得到了一个非法参数异常,我假设这是因为我将一个类对象传递到invoke方法中。事实证明,对象o实际上是不稳定的,但仍然会抛出异常
难道我们不能这样做吗?因为它不接受任何参数,所以
o = m.invoke(null);
但是,如果您的类不在同一个包中,您将遇到问题,因为该方法被声明为包私有。你可能需要打电话
m.setAccessible(true);
在调用()之前
我们可以使用反射来获取类的静态成员,而不在对象实例上调用该方法吗
当然,因为它是静态的
Object o = null;
try {
Method m = MuchoStatic.class.getMethod("getStaticMember");
m.setAccessible(true);
o = m.invoke(null);
} catch (Exception e) {
// don't ignore the exception as it may be trying to tell you something
throw new AssertionError(e);
}
如果我们使用
setAccessible(true);
对于场,甚至不需要方程中的方法
Field f = MuchoStatic.class.getField("staticMember");
Object theStatic = f.get(null);
当然,这不是推荐的。。。修补隐私不是一件好事。不要修补别人的私处
谢谢,我尝试了这个,但是我从invoke方法内部得到了一个NPE。有没有一种方法可以直接访问该字段,而不必对其调用getter?@AlexMills是的,您应该将该方法设置为静态,因为它不需要实例。