问一问,Class的getDeclaredMethod()返回的是一个Method数组,那么它是按什么顺序排列方法的呢?
因为:我发现在java项目中,和在JSP中调用getDeclaredMethod()[0].getName()得到了不同的方法名。
我还以为它是声明方法的顺序来排列的,总会把getXXXID()放在第一个?java程序中是这样,为什么跑到jsp中就变了,
要是这样的话,可不可以让它来按照某个顺序来排?
因为:我发现在java项目中,和在JSP中调用getDeclaredMethod()[0].getName()得到了不同的方法名。
我还以为它是声明方法的顺序来排列的,总会把getXXXID()放在第一个?java程序中是这样,为什么跑到jsp中就变了,
要是这样的话,可不可以让它来按照某个顺序来排?
楼主【helloruby】截止到2008-07-29 15:34:39的历史汇总数据(不包括此帖):
发帖的总数量:27 发帖的总分数:660 每贴平均分数:24
回帖的总数量:17 得分贴总数量:1 回帖的得分率:5%
结贴的总数量:19 结贴的总分数:447
无满意结贴数:3 无满意结贴分:56
未结的帖子数:8 未结的总分数:213
结贴的百分比:70.37 % 结分的百分比:67.73 %
无满意结贴率:15.79 % 无满意结分率:12.53 %
楼主加油
getDeclaredMethod
public Method getDeclaredMethod(String name,
Class<?>... parameterTypes)
throws NoSuchMethodException,
SecurityException返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。name 参数是一个 String,它指定所需方法的简称,parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识该方法的形参类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。如果名称是 "<init>” 或 “<clinit>",则引发一个 NoSuchMethodException。 参数:
name - 方法名
parameterTypes - 参数数组
返回:
该类与指定名和参数相匹配的方法的 Method 对象
public Method[] getDeclaredMethods() throws SecurityException
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何方法,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。类初始化方法 <clinit> 不包含在返回数组中。如果该类声明带有相同参数类型的多个公共成员方法,则它们都包含在返回的数组中。
请参阅 Java Language Specification 第 8.2 节。
返回:
表示此类所有声明方法的 Method 对象的数组
这点很重要,因为在实际应用中我并不知道x.getClass().getDeclaredMethods()中的x是什么对象,
invoke()来动态调方法的时候,要是能按声明的顺序来调(所有的方法都以getYYYID(),setYYYID(..)开头的),我就能保证调用的第一个方法就是哪个方法。
举具体的例子,Struts等一些框架中调用相关的setter和getter方法起码也需要你来指定set后面部分的名称.
public Method[] getDeclaredMethods() throws SecurityException 楼主说的是这个方法吧。
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何方法,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。类初始化方法 <clinit> 不包含在返回数组中。如果该类声明带有相同参数类型的多个公共成员方法,则它们都包含在返回的数组中。