黑马程序员技术交流社区

标题: 这个反射,实在找不出问题,就是实现不了功能,求帮助 [打印本页]

作者: 宋美成    时间: 2014-5-15 00:33
标题: 这个反射,实在找不出问题,就是实现不了功能,求帮助
本帖最后由 宋美成 于 2014-5-15 12:27 编辑

定义了一个函数是为了实现将字符串型的成员变量里的“b”改成“a”
具体代码如下:不知道怎么回事,就是实现不了功能,程序没有报错
  1. class getPoint
  2. {
  3.            String str1="abbbb";
  4.            String str2="abbbc";
  5.         
  6.         @Override
  7.         public String toString()
  8.         {
  9.            return str1+"+"+str2;
  10.          }
  11. }

  12. public class ReflectDemo
  13. {
  14.         public static void main(String[] args)throws Exception
  15.          {
  16.                getPoint od= new getPoint();
  17.                changeStringValue(od);
  18.                System.out.println(od);
  19.                  
  20.           }
  21.          private static void changeStringValue(Object obj)throws Exception
  22.          {
  23.                   Field[] fields =obj.getClass().getFields();
  24.                   for(Field field: fields)
  25.                   {
  26.                             if(field.getType()==String.class)//只对字符串类的成员变量有效
  27.                             {
  28.                                   String oldValue =(String)field.get(obj);//获取obj里的成员变量
  29.                                   String newValue =oldValue.replace('b', 'a');
  30.                                   field.set(obj,newValue);
  31.                              }
  32.                    }
  33.             }

  34. }
复制代码




作者: jsjchenlong    时间: 2014-5-15 08:38
下面是正确的代码,看我给你写的注释,主要问题出现getPoint这类里
你的str1和str2属性权限的问题,修改为public就可以了,
public class ReflectDemo {

        /**
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
                  getPoint od= new getPoint();
          changeStringValue(od);
          System.out.println(od);

        }
       
    private static void changeStringValue(Object obj)throws Exception
    {
             Field[] fields =obj.getClass().getFields();
             for(Field field: fields)
             {
                       if(field.getType()==String.class)//只对字符串类的成员变量有效
                       {
                             String oldValue =(String)field.get(obj);//获取obj里的成员变量
                             String newValue =oldValue.replace('b', 'a');
                             field.set(obj,newValue);
                        }
              }
       }


}

class getPoint
{
        //正确代码
        public String str1="abbbb";
        public String str2="abbbc";
        //错误的代码
        // String str1="abbbb";
        // String str2="abbbc";
        
        @Override
        public String toString()
        {
           return str1+"+"+str2;
         }
}
作者: 宋美成    时间: 2014-5-15 12:26
jsjchenlong 发表于 2014-5-15 08:38
下面是正确的代码,看我给你写的注释,主要问题出现getPoint这类里
你的str1和str2属性权限的问题,修改为p ...

恩,谢谢啦
作者: jsjchenlong    时间: 2014-5-15 19:16
宋美成 发表于 2014-5-15 12:26
恩,谢谢啦

不客气。。。。。。。。
作者: 假Rǔ有⒈兲    时间: 2014-5-15 21:38
看看 但不会啊
作者: 宋美成    时间: 2014-5-16 00:41
假Rǔ有⒈兲 发表于 2014-5-15 21:38
看看 但不会啊

很简单啦,学了就会拉,加油




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