黑马程序员技术交流社区

标题: 反射的权限问题 [打印本页]

作者: 小骗子    时间: 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);告诉编译器编译时不需要权限就可以访问。希望能帮到你吧,打字不容易!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2