java中的反思

时间:2017-06-07 21:33:58

标签: java

标题

只是一个我无法想象的问题

    Person per = new Person();
    Class cla = per.getClass();

    for(Method m : cla.getDeclaredMethods())
         System.out.println(m);

例如我在我的类Person方法中排列如下:setName,setSecondName,getName,getSecondName,当我列出对象时,我的输出是getName,下面是setName,所以到最后一个方法。有人可以解释一下为什么这个方法不是列表,因为他们排在我的班级人员面前吗?谢谢

这是我的问题:

    Person per = new Person();
    Class cla = per.getClass();

    for(Method m : cla.getDeclaredMethods())
    {
         System.out.println(m.getName());
        if(m.getParameterCount() > 0){
             Parameter [] pa = m.getParameters();
             if(pa.length == 1){
                 if(m.getName().equals("setName") )
                     m.invoke(per , "John");
                 else if(m.getName().endsWith("setSecondName"))
                     m.invoke(per, "Cameron");
             }

        }
         else
             System.out.println(m.invoke(per));
    }

实际输出:

的getName

的setName

setSecondName

getSecondName

卡梅伦

2 个答案:

答案 0 :(得分:1)

看看JavaDoc:

  

public Method [] getDeclaredMethods()                               抛出SecurityException

     

返回一个包含反映所有声明的Method对象的数组   此Class对象表示的类或接口的方法,   包括公共,受保护,默认(包)访问和私有   方法,但不包括继承的方法。

     

如果此Class对象表示具有多个声明的类型   具有相同名称和参数类型但返回不同的方法   类型,然后返回的数组有每个这样的Method对象   方法

     

如果此Class对象表示具有类初始化的类型   方法,然后返回的数组没有对应的   方法对象。

     

如果此Class对象表示没有声明的类或接口   方法,然后返回的数组的长度为0。

     

如果此Class对象表示数组类型,基本类型或   void,则返回的数组的长度为0。

     

返回数组中的元素未排序且不在任何元素中    特别订单。

答案 1 :(得分:0)

返回的数组中的元素没有排序,也没有任何特定的顺序。

JAVA API