A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hyz123456 中级黑马   /  2013-10-23 17:45  /  1094 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.lang.reflect.*;
  2. class testOne
  3. {
  4.         public static void main(String[] args)throws Exception
  5.         {
  6.                 Pro obj = new Pro("lisi");
  7.                 Field fieldY = obj.getClass().getField("Y");
  8.                 System.out.println(fieldY.get(obj));
  9.         }
  10. }
  11. class Pro
  12. {
  13.         String Y=null ;
  14.         Pro(String y)
  15.         {
  16.                 this.Y= y;
  17.         }
  18. }
复制代码
哪里出错.. 郁闷...

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

2 个回复

倒序浏览
有两种方法可以修正楼主代码的错误1,getField()方法需要参数所指的变量有public权限,而楼主的代码变量Y没有权限修饰符,这种权限要低于public,所以第一种改法只要在Pro类里给Y添加一个String修饰符就可以了
  1. import java.lang.reflect.*;
  2. class testOne
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 Pro obj = new Pro("lisi");
  7.                 Field fieldY = obj.getClass().getField("Y");
  8.                 System.out.println(fieldY.get(obj));
  9.         }
  10. }
  11. class Pro
  12. {
  13.         public String Y=null ;
  14.         Pro(String y)
  15.         {
  16.                 this.Y= y;
  17.         }
  18. }
复制代码


2,如果不添加修饰符的话,可以用暴力反射的方法,强制获得该变量,就需要用getDeclaredField()方法,然后添加一个setAccessible()语句就行了。
  1. import java.lang.reflect.*;
  2. class testOne
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 Pro obj = new Pro("lisi");
  7.                 Field fieldY = obj.getClass().getDeclaredField("Y");
  8.                 fieldY.setAccessible(true);
  9.                 System.out.println(fieldY.get(obj));
  10.         }
  11. }
  12. class Pro
  13. {
  14.         String Y=null ;
  15.         Pro(String y)
  16.         {
  17.                 this.Y= y;
  18.         }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-27 16:02:30
藤椅
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马