注册
 找回密码
 注册
江西广告网
查看: 312|回复: 0
打印 上一主题 下一主题

根据name调用getName方法

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-1-5 08:59:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
问题是这样的,我看到原来有一个方法是根据name的名称调用getName()这个方法。 然后方法的实现是使用字符串的判断来实现的 代码如下: public Object getOrderby() { if (ORDER_TITLE.equals(this.ordered)) { return getTitle(); } else if (ORDER_RENDERDATE.equals(this.ordered)) { return getRenderDate(); } else if (ORDER_CREATEDATE.equals(this.ordered)) { return getCreateDate(); } else if (ORDER_LASTMODIFIED.equals(this.ordered)) { return getLastModified(); } else { return getTitle(); } } 这样的话如果以后新增get方法就意味着要增加这个getOrderby()方法的判断。 所以我决定用类反射来改造这个方法,首先定义一个doGetMethod的方法 private Object doGetMethod(String methodName) throws Exception { Object result = null; Object[] eo = new Object[] {}; String getMethodName = "get" methodName.toLowerCase(); Method[] methods = getClass().getMethods(); for (int i = 0; i < methods.length; i ) { Method method = methods; if (getMethodName.equals(method.getName().toLowerCase())) { result = method.invoke(this, eo); } } return result; } 这里根据methodName组合成getMethodName,然后到Method[]中找这个Method,然后用invoke调用这个方法 这里要说明invoke这个方法的参数是第一个参数是指定包含方法的类,第二个参数是指定方法需要的参数。 最后修改原来的getOrderBy public Object getOrderby() { Object obj = getTitle(); try { obj = doGetMethod(getOrdered()); } catch (Exception e) { return obj; } return obj; }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表