我的理解就是通过反射获得一个类的元数据,相当于数据库中的metaData一样

解决方案 »

  1.   

    哎,我现在正是在这个问题上卡着了。用invoke居然出现java.lang.IllegalArgumentException: object is not an instance of declaring class实在不理解啊。
      

  2.   

    lhzongji(踪迹)  那是说你的 invoke 给的参数和方法原型的参数类型不匹配。
      

  3.   

    如果用 reflection 来做插件,就非常非常的方便。
    reflection 非常适合你这种情况:你在编写代码的时候不知道以后可能会用到什么样的类,但你知道这些类都有什么样的方法,或者这些类都实现某个接口,那么你就通过 reflection 来,根据 String 类型的类名参数,生成实例,并调用相关方法。
      

  4.   

    JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。
      

  5.   

    jamesfancy:请看看我的代码,如果解决了,我开贴给分。          Class[] c=new Class[1];
              c[0]="".getClass();
              java.lang.reflect.Method m=testClass.getClass().getDeclaredMethod("set" + testClass.getClass().getDeclaredFields()[i].getName(),c);
              Object b=m.invoke("test",new Object[0]);//这里出错。
    方法我是的得到了。但就是invoke时,出错。
      

  6.   

    那个方法的原型就是很普通一个set方法。    public void settestStr(java.lang.String str) {
            this.testStr = str;
        }
      

  7.   

    我的问题转到这里了,希望大家多帮忙啊。http://community.csdn.net/Expert/topic/3560/3560885.xml?temp=.9683039
      

  8.   

    这是我学习反射时候的一些总结
    Class A {
    private String a;
    public void setB(String b){
    this.a = b;
    }
    }
     
     
    有一个类  A a = new A();
    获取Class 对象的三种方法:
    1.Class ca = a.getClass();
    2 Class ca = Class.forName("A");//参数是类名,必须要指明该类的路径: 包.类名
    3 Class ca = A.Class;
     
    可以从class中获得 属性,方法,构造函数的特性
     
    必须放在try,catch中
     
    把forName 和newInstance 方法结合起来使用可以创建对象。
    如:
     
    A aa =(A)Class.forName("A").newInstance();
    返回的是object 需要上嗍
    (要捕捉异常)
     
     
    aa.getDeclaredFields(); 返回的是一个Field 数组
    aa.getDeclaredFields(String ) 返回的是一个Field的对象 注意:String参数必须是A 类中存在的对象
                                  否则会有异常
     
    Field field ;
    field.getName();//得到该字段名
     
    field.getType().getName()  //得到该字段的类型
    Class field.getType()      //返回的是Class类型
     --------------------------------------------------------------------------------Method[] method = mm.getDeclaredMethods(); //返回方法的对象
    String   method[i].getName()               //返回方法名
    String   method[i].getReturnType().getName()     //返回该方法的返回类型
     
    method[i].getReturnType()//返回的是一个Class类--------------------------------------------------------------------------------Method 的运用,也就是bean 的运行机制
     
    Method method_n = mm.getDeclaredMethod("setB",class_n);
     
    //参数的含义:
    1。字符串:该字符串必须是方法名,(该方法是已经存在的)
    2。Class[]类型 :表示为给方法的参数类型,如果没有参数就用null; 
     
    obj method_n.invoke(obj,obj[]);
    执行该方法,这里就是执行 “setB”方法。
    参数意义:
    1。对象名称,这里就是 最早的 a 对象。
    2。该方法的参数,如果没有参数就设置为null。
    返回值是一个obj;
     
    如果该方法是静态的 那么第一个参数也可以是null;
     
     
    在这使用了该方法就想当于在对象 a里使用了 setB方法 因为set方法没有返回值 所以返回的是null
    同理如果使用的是 getB的方法那么就要  String str = (String)method_n.invoke(obj,obj[]);
     
     
    String uu = (String )method_n.invoke(b,ss);后来在开发中使用了一些反射的机制,主要用于公共的方法,让别人调用
      

  9.   

    我只总结出两点1 反射用来开发IDE
    2 反射用来开发某些框架
      

  10.   

    支持catblue(limiaomiao)一下下,呵呵
      

  11.   

    http://www.javayou.com/showlog.jspe?cat_id=-1&log_id=369