gpt4 book ai didi

java - 为什么我在遍历方法时会得到额外的东西?

转载 作者:行者123 更新时间:2023-11-29 06:32:28 25 4
gpt4 key购买 nike

好吧,不知道发生了什么。我正在使用 Java 反射并迭代和检查特定类的方法。下面是我正在使用的以下代码:

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();
}
}
}

汽车类别:

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

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

它通过精细打印出前两个方法和返回值进行循环,但随后它继续并打印出一个 wait() 并且不确定为什么我收到以下错误:

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

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

最佳答案

getMethods 返回类可用的所有公共(public)方法,包括像 wait() toString() 这样继承的方法,如您所见t 接受 (String, Integer) 参数,这就是为什么

useCases.getMethod(methods[i].getName(), new Class[]{String.class, Integer.class});

无法找到 wait(String, Integer)

要仅获取在 Car 类中声明的方法,请改用 getDeclaredMethods

顺便说一句:而不是

System.out.print(returnV.toString() + "\n");

这将在 returnV.toString() 上抛出 NullPointerException 如果 returnV 将是 null 使用

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

关于java - 为什么我在遍历方法时会得到额外的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29709816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com