问一问,Class的getDeclaredMethod()返回的是一个Method数组,那么它是按什么顺序排列方法的呢?
因为:我发现在java项目中,和在JSP中调用getDeclaredMethod()[0].getName()得到了不同的方法名。
我还以为它是声明方法的顺序来排列的,总会把getXXXID()放在第一个?java程序中是这样,为什么跑到jsp中就变了,
要是这样的话,可不可以让它来按照某个顺序来排?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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 %                  
    楼主加油
      

  2.   

    getDeclaredMethod得到的是一个Method对象不是数组,你可以通过制定你需要的方法的名字得到相应的代表方法的对象
    getDeclaredMethod
    public Method getDeclaredMethod(String name,
                                    Class<?>... parameterTypes)
                             throws NoSuchMethodException,
                                    SecurityException返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。name 参数是一个 String,它指定所需方法的简称,parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识该方法的形参类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。如果名称是 "<init>” 或 “<clinit>",则引发一个 NoSuchMethodException。 参数:
    name - 方法名
    parameterTypes - 参数数组 
    返回:
    该类与指定名和参数相匹配的方法的 Method 对象 
      

  3.   

    getDeclaredMethods
    public Method[] getDeclaredMethods() throws SecurityException
    返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何方法,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。类初始化方法 <clinit> 不包含在返回数组中。如果该类声明带有相同参数类型的多个公共成员方法,则它们都包含在返回的数组中。 
    请参阅 Java Language Specification 第 8.2 节。 
    返回:
    表示此类所有声明方法的 Method 对象的数组 
      

  4.   

    getDeclaredMethods()返回的method数组的确是没有顺序,但我就想让它按照声明的顺序来排列。
    这点很重要,因为在实际应用中我并不知道x.getClass().getDeclaredMethods()中的x是什么对象,
    invoke()来动态调方法的时候,要是能按声明的顺序来调(所有的方法都以getYYYID(),setYYYID(..)开头的),我就能保证调用的第一个方法就是哪个方法。
      

  5.   

    XX楼上,我不是说过了吗:对象是动态的,方法名字更是动态的[getXxxID(),第一个声明的],我要是知道方法名还有这么费劲?
      

  6.   

    XX,我想是你的设计有问题,你去看看有关的资料,我能看到的书中能提供的例子都是知道函数名的情况去getDeclaredMethod(),然后去invoke的.
    举具体的例子,Struts等一些框架中调用相关的setter和getter方法起码也需要你来指定set后面部分的名称.
      

  7.   

    好笑,怎么都 XX 上了
    public Method[] getDeclaredMethods() throws SecurityException 楼主说的是这个方法吧。
      

  8.   

    public Method[] getDeclaredMethods() throws SecurityException
    返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何方法,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。类初始化方法 <clinit> 不包含在返回数组中。如果该类声明带有相同参数类型的多个公共成员方法,则它们都包含在返回的数组中。
      

  9.   

    虽然不是我要的答案,虽然说的我也知道,ZangXT 但很热心,你也很热心,虽然跟没问答没什么区别,也得XX你。