知心白姐 发表于 2009-1-5 08:59:51

根据name调用getName方法

问题是这样的,我看到原来有一个方法是根据name的名称调用getName()这个方法。
然后方法的实现是使用字符串的判断来实现的
代码如下:


www.ad119.cn/bbs/attachments/basic/20090105/2009158592659377801.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592664077802.gif
public Object getOrderby() {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592668777803.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592673477804.gif
      if (ORDER_TITLE.equals(this.ordered)) {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
            return getTitle();

www.ad119.cn/bbs/attachments/basic/20090105/2009158592668777803.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592673477804.gif
      } else if (ORDER_RENDERDATE.equals(this.ordered)) {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
            return getRenderDate();

www.ad119.cn/bbs/attachments/basic/20090105/2009158592668777803.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592673477804.gif
      } else if (ORDER_CREATEDATE.equals(this.ordered)) {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
            return getCreateDate();

www.ad119.cn/bbs/attachments/basic/20090105/2009158592668777803.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592673477804.gif
      } else if (ORDER_LASTMODIFIED.equals(this.ordered)) {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
            return getLastModified();

www.ad119.cn/bbs/attachments/basic/20090105/2009158592668777803.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592673477804.gif
      } else {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
            return getTitle();

www.ad119.cn/bbs/attachments/basic/20090105/2009158592682877806.gif
      }

www.ad119.cn/bbs/attachments/basic/20090105/2009158592687577807.gif
    }
    这样的话如果以后新增get方法就意味着要增加这个getOrderby()方法的判断。
所以我决定用类反射来改造这个方法,首先定义一个doGetMethod的方法


www.ad119.cn/bbs/attachments/basic/20090105/2009158592659377801.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592664077802.gif
private Object doGetMethod(String methodName) throws Exception {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
      Object result = null;

www.ad119.cn/bbs/attachments/basic/20090105/2009158592668777803.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592673477804.gif
      Object[] eo = new Object[] {};

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
      String getMethodName = "get"   methodName.toLowerCase();

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
      Method[] methods = getClass().getMethods();

www.ad119.cn/bbs/attachments/basic/20090105/2009158592668777803.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592673477804.gif
      for (int i = 0; i < methods.length; i) {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
            Method method = methods;

www.ad119.cn/bbs/attachments/basic/20090105/2009158592668777803.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592673477804.gif
            if (getMethodName.equals(method.getName().toLowerCase())) {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
                result = method.invoke(this, eo);

www.ad119.cn/bbs/attachments/basic/20090105/2009158592682877806.gif
            }

www.ad119.cn/bbs/attachments/basic/20090105/2009158592682877806.gif
      }

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
      return result;

www.ad119.cn/bbs/attachments/basic/20090105/2009158592687577807.gif
    }    这里根据methodName组合成getMethodName,然后到Method[]中找这个Method,然后用invoke调用这个方法
这里要说明invoke这个方法的参数是第一个参数是指定包含方法的类,第二个参数是指定方法需要的参数。
最后修改原来的getOrderBy


www.ad119.cn/bbs/attachments/basic/20090105/2009158592659377801.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592664077802.gif
public Object getOrderby() {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
      Object obj = getTitle();

www.ad119.cn/bbs/attachments/basic/20090105/2009158592668777803.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592673477804.gif
      try {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
            obj = doGetMethod(getOrdered());

www.ad119.cn/bbs/attachments/basic/20090105/2009158592668777803.gif

www.ad119.cn/bbs/attachments/basic/20090105/2009158592673477804.gif
      } catch (Exception e) {

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
            return obj;

www.ad119.cn/bbs/attachments/basic/20090105/2009158592682877806.gif
      }

www.ad119.cn/bbs/attachments/basic/20090105/2009158592678177805.gif
      return obj;

www.ad119.cn/bbs/attachments/basic/20090105/2009158592687577807.gif
    }
页: [1]
查看完整版本: 根据name调用getName方法