黑马程序员技术交流社区
标题:
关于JavaBean和内省的问题
[打印本页]
作者:
杜成龙
时间:
2013-9-19 16:29
标题:
关于JavaBean和内省的问题
本帖最后由 杜成龙 于 2013-9-23 09:08 编辑
各位大神,请教一个问题!
在张老师的高新技术的JavaBean和内省中讲到,用内省的方法去操作JavaBean的属性比普通方法简单,但我怎么觉得普通方法更简单呢?
看下面的例子:
首先是用内省的方法来处理:
<P>package cn.itcast.day1;</P>
<P> </P>
<P>import java.beans.PropertyDescriptor;</P>
<P>import java.lang.reflect.Method;</P>
<P>public class IntroSpectorTest1 {</P>
<P> public static void main(String[] args)throws Exception {
ReflectPoint3 rp=new ReflectPoint3(6,9);
String propertyName="x";
System.out.println(getProperty(rp, propertyName));
int value=8;
setProperty(rp, propertyName, value);
System.out.println(getProperty(rp, propertyName));
}
private static void setProperty(Object rp, String propertyName,
int value) throws Exception {
PropertyDescriptor pd=new PropertyDescriptor(propertyName,rp.getClass());
Method methodsetX=pd.getWriteMethod();
methodsetX.invoke(rp,value);
}</P>
<P> private static Object getProperty(Object rp, String propertyName)
throws Exception {
PropertyDescriptor pd=new PropertyDescriptor(propertyName,rp.getClass());
Method methodgetX=pd.getReadMethod();
Object retVal=methodgetX.invoke(rp);
return retVal;
}
}
</P>
复制代码
如果我用普通方法来操作属性值的话,可以这样吧?看下面代码
package cn.itcast.day1;
public class IntroSpectorTest1 {
public static void main(String[] args)throws Exception {
ReflectPoint3 rp=new ReflectPoint3(6,9);
System.out.println(rp.getX());
rp.setX(8);
System.out.println(rp.getX());
}
}
复制代码
看上去简单多吧?你可能会问,我怎么知道有getX()和setX()方法的,因为课程里讲了JavaBean类中的属性是私有的,而提供出去的就是这种set和get形式的方法来操作属性,而事实上这些属性就是通过这些特定格式的方法来推断出来的,既然如此,我直接用这些方法来操作岂不是更方便?
可能我理解的有问题,但这确实是我的一个疑问,还望大家指教!谢谢!
作者:
神之梦
时间:
2013-9-19 20:44
楼主连反射都省了,不错
作者:
罗凯健
时间:
2013-9-21 20:26
你的方法是写死的,在做框架的时候你的代码并不适合。而用内省的方法就比较灵活,你传入适当的参数它就返回相应的值给你,这是做框架的时候需要的。
作者:
yting_xmei1129
时间:
2013-9-22 15:29
楼主,张老师说的内省是为了以后学习框架打基础,框架中你不知道别人会传什么类型的对象过来,是未知的,所以就要用内省。然而在你这个问题中当然是普通方法更好了,以为你知道了那个累是什么样的,也知道了里面的方法,试想一下你要是不知道呢?是不是普通方法就无法操作了,是不是就要用到内省了,希望对楼主有帮助、、、
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2