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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

只争朝阳

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 只争朝阳 初级黑马   /  2013-8-8 15:00  /  1246 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Class 1:
public class Test {
        public int i = 1;
        public String s1 = "itcast";
        public String s2 = "all";
        private String s3 = "case";
        @Override
        public String toString() {
                return s1 +" | "+ s2 +" | "+ s3;
        }
}


Class 2:
public class FanSe {       
        public static void main(String[] args)throws Exception {
                Class cls1 = Class.forName("cn.string_a_b.Test");
                method(cls1);
        }
        public static void method(Object obj)throws Exception{
                Field[] f1 = obj.getClass().getDeclaredFields();
                System.out.println("f1"+ f1);
                for (Field field : f1) {
                        Object f0 = field.getType();
                        if(f0 == String.class){
                                String oldValue = (String)field.get(obj);
                                String newValue = oldValue.replace('a', 'q');
                                field.set(obj, newValue);
                        }
                }
        }
}

代码就是上面这些了,已运行就报错,但是一直找不到错误的原因是什么,请哪位牛哥给分析一下,谢谢!(在线蹲着等{:soso_e123:}....)

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

2 个回复

正序浏览
你好,看看你的method方法中接受的是一个Object对象,当传入一个Class的实例对象时也是可以的;
但是如果你传入了一个class(字节码)对象后就不该再对cls1获取字节码;
按照你的需求,主方法中可以写成:
     Test test = new Test();
        method(test);

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
  1. public class Test4 {        
  2.     public static void main(String[] args)throws Exception {
  3.           //  Class cls1 = Class.forName("question.ooTest");  
  4.             Test test = new Test();
  5.         method(test);
  6.         System.out.println(test.toString());
  7.     }
  8.     public static void method(Object obj)throws Exception{
  9.             Field[] f1 = obj.getClass().getDeclaredFields();
  10.             System.out.println("f1"+ f1);
  11.             for (Field field : f1) {
  12.                     field.setAccessible(true);
  13.                 Object f0 = field.getType();
  14.                 if(f0 == String.class){
  15.                     String oldValue = (String)field.get(obj);
  16.                     String newValue = oldValue.replace('a', 'q');
  17.                     field.set(obj, newValue);
  18.                 }
  19.             }
  20.     }
  21. }仔细对比
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马