黑马程序员技术交流社区

标题: 求解 [打印本页]

作者: 黑马张国礼    时间: 2012-6-11 21:37
标题: 求解
ReflectPoint pt1=new ReflectPoint(3,5);
String propertyName="x";
PropertyDescriptor pd=new PropertyDescriptor(propertyName,pt1.getClass());
Method methodGetX=pd.getReadMethod();
Object retval=methodGetX.invoke(pt1);
System.out.println(retval);
既然已经知道类中存在了getX()方法,那么直接使用
System.out.println(pt1.getX());多直接啊,为什么还要用这么些复杂的方法呢???
作者: 赵兵锋    时间: 2012-6-12 19:23
  1. public class Main{
  2.     public static void main(String[] args) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException {
  3.             ReflectPoint pt1=new ReflectPoint(3);
  4.             String propertyName="x";
  5.             PropertyDescriptor pd=new PropertyDescriptor(propertyName,pt1.getClass());
  6.             Method methodGetX=pd.getReadMethod();//这里返回的是默认的getX方法。
  7.             Object retval=methodGetX.invoke(pt1);//执行默认getX方法。
  8.             System.out.println(retval);//输出3
  9.             Method m = pt1.getClass().getMethod("myGetFuncation",null);//获取类中myGetFuncation方法的Method对象
  10.             pd.setReadMethod(m);//将自定义的方法设置为x的默认读取方法
  11.             Method anotherMethodGetX=pd.getReadMethod();//再次取得x的默认获取方法,只是此时的默认获取方法已被我们改变了。
  12.             Object retval2=anotherMethodGetX.invoke(pt1);
  13.             System.out.println(retval2);//输出103
  14.     }
  15. }
  16. class ReflectPoint {
  17.         int x;
  18.         public ReflectPoint(int x){
  19.                 this.x = x;
  20.         }
  21.         public int getX() {//默认x的获取方法
  22.                 return x;
  23.         }
  24.         public void setX(int x) {
  25.                 this.x = x;
  26.         }
  27.         public int  myGetFuncation() {//自定义一个也可获取x值的方法,但是会把x加上100后返回。
  28.                 return x+100;
  29.         }
  30. }
复制代码





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