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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马斯巴达 高级黑马   /  2013-3-5 15:16  /  1599 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢军 于 2013-3-11 16:37 编辑

package cn.itcast.day1;


import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;


public class IntroSpectorTest {



        public static void main(String[] args)throws Exception {
               
      ReflectPoint pt1 = new ReflectPoint(3, 5);
      String propertyName= "x";
      PropertyDescriptor pd1 =new PropertyDescriptor(propertyName,pt1.getClass());
     Method methodGetX = pd1.getReadMethod();
    Object retVal = methodGetX.invoke(pt1);//get有返回值
    System.out.println(retVal);
   
    PropertyDescriptor pd2 =new PropertyDescriptor(propertyName,pt1.getClass());
    Method methodSetX = pd2.getReadMethod();
    methodGetX.invoke(pt1,7);//set是没有返回值的
   
        }

这里面声明的属性propertyName=“x”,x在这里怎么理解呢?为什么getx 和setx都可以使用它作为参数呢?





评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

4 个回复

倒序浏览
X在里面不是参数.
javaBean中 Field值是不能直接取出的.
需要通过setXxx 和getXxx 来设置和取出.
刚才说的x就相当于该javaBean中的Field引用.
只是引文Field一般都是用private修饰的, 外部无法看到,所以通过getX和setX方法名称来推断.
例如:
class Person{
        private String name;
        Person(String name){
                this.name = name;
        }
        public void setName(String name){
                this.name = name;
        }
        public String getName(){
                return this.name;
        }       
}
该类中的getName 和setName 中的name 可以当作X .

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
你想对一个对象的属性进行操作但是它的属性没有get()和set方法,所有就使用到了类 PropertyDescriptor,这是 PropertyDescriptor类的一个构造函数
PropertyDescriptor(String propertyName, Class<?> beanClass)
String propertyName,你要对哪个属性进行操作,Class<?> beanClass,你要把哪个类当做javabean看,我这么理解,要把哪个类当做javabean看,它的哪个属性进行操作,这里面声明的属性propertyName=“x”,x就是ReflectPoint类的x属性,
ReflectPoint类是这么定义的吧
        private int x;
        public int y;
        public ReflectPoint(int x, int y) {
                super();
                this.x = x;
                this.y = y;
        }
可这么理解,PropertyDescriptor构造函数是一个加工机器,如果是榨果汁机器,不同的水果放进去榨出来的是不一样的,你去喝果汁才能知道它的味道,喝就是果汁的一个方法,这么获得这个方法就是用.getReadMethod方法。如果是是别的机器……就不说了。
为什么getx 和setx都可以使用它作为参数呢?
这里是Method的ivoke()方法的问题吧,
其实你上面代码写错了
Method methodSetX = pd2.getReadMethod();
methodGetX.invoke(pt1,7)
应该是
Method methodSetX = pd2.getWriteMethod();
methodSetX.invoke(pt1,7)
方法的调用形式对象.方法名(参数)
这里p1是对象,参数就是7,这里的7就是x 。methodSet.invoke()就是反射方法调用方法,

上面就是我的理解,可能我的理解可能描述不一样,但也就只能这样了,楼主多看看几遍视频吧,这段视频我看过3遍了,看2遍然后第三遍写日记。。。一遍比几遍清晰

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
夏晓彤 发表于 2013-3-5 16:38
你想对一个对象的属性进行操作但是它的属性没有get()和set方法,所有就使用到了类 PropertyDescriptor, ...

嗯。我又看了里一边效果好多啦、、谢啦{:3_57:}
回复 使用道具 举报
司懿卓 发表于 2013-3-5 16:22
X在里面不是参数.
javaBean中 Field值是不能直接取出的.
需要通过setXxx 和getXxx 来设置和取出.

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