问答详情
源自:5-2 项目实现(上)

关于反射的问题

 Object fieldValue = null;
   try {
    Method getMethod = c.getMethod(getMethodName);
    fieldValue = getMethod.invoke(f);
   } catch (Exception e) {
    e.printStackTrace();

这一段代码不是很懂,只知道与反射有关


提问者:万埃一尘 2016-02-26 22:57

个回答

  • qq_云在风中_0
    2016-05-30 20:59:58
    已采纳

     Object fieldValue = null; //定义一个object变量用语存储对象的属性值
       try {
        Method getMethod = c.getMethod(getMethodName); //根据方法名字获得这个方法
        fieldValue = getMethod.invoke(f);//执行f对象的方法名为getMethodName的方法。
       } catch (Exception e) {
        e.printStackTrace();

    其实,这段代码要做的就是,根据属性名称获取对象的属性值。就是你知道了对象的属性名,但是要获取这个对象的值。

    所以,你直接调用对象的get方法就可以得到对象的属性值。但是因为属性名称是个变量,所以这时候就要通过反射来实现了,具体怎么实现呢?

    1:根据属性名称,构造属性方法名。比如属性名是namecode他的get方法就是getNamecode(){......},所以方法名就是getNamecode,

    2:根据方法的名称,获取这个方法对象Method getMethod = c.getMethod(getMethodName);

    3:这个方法的方法对象你获得了,就可以执行这个方法了,具体它要调用一个invoke的方法,具体invoke做了什么你可以去看源码,也可以自己了解,我可以告诉你,这句代码:fieldValue = getMethod.invoke(f);
    它相当于是f对象调用它的获取这个属性的属性值的get方法。就是执行你第2部获取到的那个方法。

    这时候,就得到了这个对象的已知属性名称的属性值。

  • oldmee
    2016-02-27 20:01:04

    方法反射到类从而拿到方法中的值