标题: 反射的权限问题 [打印本页] 作者: 小骗子 时间: 2013-12-20 13:15 标题: 反射的权限问题 在同一个包下,创建2个类
Test1
public class Test1 {
private int x;
protected int y;
public Test1(int x,int y)
{
super();
this.x=x;
this.y=y;
}
}
Test2
public class Test2{
public static void main(String[] args) throws Exception{
Test1 point=new Test1(3,5);
Field filedY=point.getClass().getField("y");
System.out.println(filedY.get(point));
}
}
为什么不能通过反射取到变量y,这不是同一个包下,protected权限是足够的? 作者: 靓仔 时间: 2013-12-20 17:17
并不是这个原因,不在同一个包中也是可以访问的,你的确是先取得了字节码,在取字段,只不过在去取字段的时候,建议你看看APi,point.getClass().getField("y");,它反映此 Class 对象所表示的类或接口的指定公共成员字段,也就是说是public修饰的,如果要想取到private或者别的访问权限,就得使用Field getDeclaredField(String name) 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。 ,这样你就可以访问包了,但是光这一步还是不行的,在filedY.get(point)之前你还得声明一下fieldY.setAccessible(true);告诉编译器编译时不需要权限就可以访问。希望能帮到你吧,打字不容易!