黑马程序员技术交流社区

标题: 第二个程序的这句String propertyName="a";到底有什么用呢 [打印本页]

作者: 杨朔    时间: 2012-7-4 10:37
标题: 第二个程序的这句String propertyName="a";到底有什么用呢
本帖最后由 杨朔 于 2012-7-4 22:55 编辑

这个是老师的一个例子就是不懂
第一个

public class TestDemo
{
        
        public TestDemo(int a, int b) {
                super();
                this.a = a;
                this.b = b;
        }
        private int a;
        public int b;
        public int getA() {
                return a;
        }
        public void setA(int a) {
                this.a = a;
        }
        public int getB() {
                return b;
        }
        public void setB(int b) {
                this.b = b;
        }
        
        
        
}
第二个
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;


public class IntrospectorTest {

        /**
         * @param args
         */
        public static void main(String[] args)throws Exception {
               
                TestDemo t=new TestDemo(3,5);
//                String propertrName="x";
               
                String propertyName="a";
                PropertyDescriptor pd=new PropertyDescriptor(propertyName,t.getClass());
               
                Method m=pd.getReadMethod();
                Object retVal=m.invoke(t);
                System.out.println(retVal);
               
                Method m1=pd.getWriteMethod();
                m1.invoke(t,1);
//                System.out.println(retVal);
               
                t.getA();
                System.out.println(t.getA());
               
               

        }

}


作者: 周素强    时间: 2012-7-4 13:39
String propertyName="a"; //这里定义string变量其实就是定义TestDemo类中你想获取的成员属性名字
PropertyDescriptor pd=new PropertyDescriptor(propertyName,t.getClass());  //创建属性描述类对象,并传入属性名和属性所属类的字节码

作者: 周朋飞    时间: 2012-7-4 14:45

首先这是javabean内省的例子其实就是在你不知道类对象的属性的时候给其设值'你问的那个问题为什么一个字符串是a因为通过get方法的名字可以确定字段的名字因为bean都是以字段的大写来命名的比如x就是getX所以这就是这句话的意思不懂了可以再问我
作者: 杨朔    时间: 2012-7-4 19:48
周朋飞 发表于 2012-7-4 14:45
首先这是javabean内省的例子其实就是在你不知道类对象的属性的时候给其设值'你问的那个问题为什么一个字符 ...

问题是怎么知道getX的,这个里面没有给出getX这个方法
作者: 金肖    时间: 2012-7-4 20:17
在JavaBean中规范写法为,字段名小写,获取和设置某个字段的get,set中将字段名的首字母该为大写,当然你也可以不按这个规范,但是为了更专业
还是按规范比较好

张老师视频里面说的很清楚了
作者: 蒋映辉    时间: 2012-7-4 20:40
杨朔 发表于 2012-7-4 19:48
问题是怎么知道getX的,这个里面没有给出getX这个方法

你问的问题就是要确定a是JavaBean中的变量
Method m=pd.getReadMethod();
  这个就是得到get方法  所以才会要求你的JavaBean要写规范
作者: 杨朔    时间: 2012-7-4 21:39
蒋映辉 发表于 2012-7-4 20:40
你问的问题就是要确定a是JavaBean中的变量
Method m=pd.getReadMethod();
  这个就是得到get方法  所以才 ...

Method m=pd.getReadMethod();这个方法在这道题里面是获得另一个属性的,没有给这个a用get方法,也没有对这个a的具体说明,所以我还是不是很懂。
作者: 蒋映辉    时间: 2012-7-4 21:54
杨朔 发表于 2012-7-4 21:39
Method m=pd.getReadMethod();这个方法在这道题里面是获得另一个属性的,没有给这个a用get方法,也没有对 ...

String propertyName="a";
PropertyDescriptor pd=new PropertyDescriptor(propertyName,t.getClass());这句代码有什么用?就是给a这个属性一个描述的对象  然后下面的pd对象的获得getMethod方法是就是获取a这个变量的get方法了 因为pd是描述a变量的  所以你得到的不可能是获取b的方法  这就是你为什么要用String propertyName="a";
这个来限制变量必须是a了
               
                Method m=pd.getReadMethod();

作者: 杨朔    时间: 2012-7-4 22:53
蒋映辉 发表于 2012-7-4 21:54
String propertyName="a";
PropertyDescriptor pd=new PropertyDescriptor(propertyName,t.getClass()); ...

有时候看着看着就不知道到底怎么了,就像是钻了牛角尖,在突然间一看
就明白了,终于懂了。
作者: 蒋映辉    时间: 2012-7-4 23:05
杨朔 发表于 2012-7-4 22:53
有时候看着看着就不知道到底怎么了,就像是钻了牛角尖,在突然间一看
就明白了,终于懂了。 ...

恩咯  懂了就好  我觉得反思和总结比敲代码  看视频都重要




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