如题,定义了一个Person类有一个private方法
public Person {
private void test();//private方法
}
使用反射来调用
先说有问题的方法
Constructor con= Person.class.getConstructor();//构造方法
Object object = con.newInstance();//生成对象
//有问题
Person.class.getDeclareMethod("test").setAccessible(true);
Person.class.getDeclareMethod("test").invoke(object);//报错不能访问
/*Person.class.getDeclareMethod("test").isAccessible()还是等于false*/
而使用下面的写法却可以
Method = Person.class.getDeclareMethod("test");
method.setAccessible(true);
method.invoke(object);//不报错,正常执行
/*method.isAccessible()是true
而Person.class.getDeclareMethod("test").isAccessible()还是等于false
*/
这是Person.class.getDeclareMethod("test")方法的问题吗,这个问题在反射调用构造函数时也会出现,他们都有一个@CallerSensitive注解,是这个原因吗?望解答。
每次获取方法得到不是同一个
Method
对象setAccessable
仅作用于得到的方法对象,也不是全局的所以第一种写法会报错
另外,
setAccessable
的属性并没有被包含在Method
的equals
和hashCode
中