黑马程序员技术交流社区

标题: Field问题 [打印本页]

作者: 程序爱好者    时间: 2014-5-4 20:43
标题: Field问题
  1. import java.text.DateFormat.Field;
  2. public class Test {
  3.         public static void main(String[] args) throws Exception
  4.         {
  5.                 ReflectPoint pt=new ReflectPoint(3,5);
  6.                 Field fieldy=pt.getClass().getField("y"); //pt.getClass().getField("y");  这句编译错了 ,怎么错的
  7.                 //java.lang.reflect.Field fieldy=pt.getClass().getField("y"); 这样编译就对了,可是为什么要这样。
  8.                 System.out.println(fieldy.get(pt));//fieldy.get(pt)  这编译也错了  我刚看反射,求指教
  9.                 Field fieldx=pt.getClass().getField("x");
  10.                 System.out.println(fieldx.get(pt));       
  11.         }
  12. }


  13. public class ReflectPoint {
  14.         private int x;
  15.         public int y;
  16.         public ReflectPoint(int x, int y) {
  17.                 super();
  18.                 this.x = x;
  19.                 this.y = y;
  20.         }       
  21. }
复制代码

作者: Lin0411    时间: 2014-5-4 20:59
刚开始的导入的是java.text中的Field类,故编译器报错,是包导错的问题。
第二个错误应该是由第一个错误引起的。记得一定要导对包!!
作者: ò壞尛孩    时间: 2014-5-4 21:01
本帖最后由 ò壞尛孩 于 2014-5-4 21:04 编辑

import java.text.DateFormat.Field;    包导入错误!如果成员私有private 得用暴力反射


作者: 程序爱好者    时间: 2014-5-4 21:56
ò壞尛孩 发表于 2014-5-4 21:01
import java.text.DateFormat.Field;    包导入错误!如果成员私有private 得用暴力反射

...
  1.                 ReflectPoint pt=new ReflectPoint(3,5);
  2.                 Field fieldy=pt.getClass().getField("y");
  3.                 System.out.println(fieldy.get(pt));
  4.                 Field fieldx=pt.getClass().getField("x");
  5.                 fieldx.setAccessible(true);   //用了这句怎么还是错呢?
  6.                 System.out.println(fieldx.get(pt));       
复制代码


输出结果为:
5
Exception in thread "main" java.lang.NoSuchFieldException: x
        at java.lang.Class.getField(Class.java:1520)
        at fanshe1.Test.main(Test.java:11)




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