本帖最后由 杜成龙 于 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形式的方法来操作属性,而事实上这些属性就是通过这些特定格式的方法来推断出来的,既然如此,我直接用这些方法来操作岂不是更方便?
可能我理解的有问题,但这确实是我的一个疑问,还望大家指教!谢谢!
|