为什么我在循环方法时会得到额外的东西?

use*_*976 1 java reflection

好吧不确定发生了什么.我正在使用Java Reflection并迭代和检查特定类的方法.以下是我正在使用的以下代码:

public void test(){

    Class useCases = Car.class;

    Method[] methods = useCases.getMethods();
    Integer[] numbers = {2, 5};
    String[] numberStrings = {"2", "5"};
    for(int i=0; i<methods.length; i++){
        try {
            System.out.print(methods[i].getName());
            Method method = useCases.getMethod(methods[i].getName(), new Class[]{String.class, Integer.class});
            Object returnV = method.invoke(new Car(), numberStrings[i], numbers[i]);
            System.out.print(returnV.toString() + "\n");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

汽车类:

public String getNumber(String number, Integer times){
    return times == 2 ? number : null;
}

public String getNumber1(String number, Integer times){
    return times == 5 ? number : null;
}
Run Code Online (Sandbox Code Playgroud)

它循环通过精细打印前两个方法和返回值罚款,但然后它继续并打印出wait()并不知道为什么,我收到以下错误:

java.lang.NoSuchMethodException:sample.Car.wait(java.lang.String,java.lang.Integer)

有关为什么循环不仅仅打印并返回该Car类中仅有的两个方法的值的任何帮助.

Psh*_*emo 5

getMethods返回可用于类的所有公共方法,包括那些继承的方法wait() toString(),如您所见,不接受(String, Integer)参数,这就是原因

useCases.getMethod(methods[i].getName(), new Class[]{String.class, Integer.class});
Run Code Online (Sandbox Code Playgroud)

无法找到wait(String, Integer).

仅获取在Car类中声明的方法getDeclaredMethods.

BTW:而不是

System.out.print(returnV.toString() + "\n");
Run Code Online (Sandbox Code Playgroud)

这将引发NullPointerException关于returnV.toString()是否returnVnull使用

System.out.println(returnV); // also you don't need to explicitly add `\n`,
                             // use println will add used by current OS line 
                             // separator for you automatically 
Run Code Online (Sandbox Code Playgroud)