为什么我在遍历方法时会得到额外的东西?
Why am I getting extra stuff when looping through methods?
好的,不确定发生了什么。我正在使用 Java 反射、迭代和检查特定 class 的方法。下面是我正在使用的以下代码:
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();
}
}
}
汽车Class:
public String getNumber(String number, Integer times){
return times == 2 ? number : null;
}
public String getNumber1(String number, Integer times){
return times == 5 ? number : null;
}
它循环通过精细打印出前两个方法和 return 值,但随后它继续并打印出一个 wait() 并且不确定为什么我收到以下错误:
java.lang.NoSuchMethodException: sample.Car.wait(java.lang.String,
java.lang.Integer)
关于为什么循环不以仅打印和 return 计算该 Car 中仅有的两个方法的值的任何帮助 class。
getMethods
returns class 可用的所有 public 方法,包括像 wait()
toString()
这样继承的方法,如您所见'接受 (String, Integer)
个参数,这就是为什么
useCases.getMethod(methods[i].getName(), new Class[]{String.class, Integer.class});
无法找到 wait(String, Integer)
。
要仅获取在 Car
class 中声明的方法,请改用 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
每个 Class 都隐式扩展了 Object,因此您也可以获得包含在 Object 中的所有方法。
好的,不确定发生了什么。我正在使用 Java 反射、迭代和检查特定 class 的方法。下面是我正在使用的以下代码:
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();
}
}
}
汽车Class:
public String getNumber(String number, Integer times){
return times == 2 ? number : null;
}
public String getNumber1(String number, Integer times){
return times == 5 ? number : null;
}
它循环通过精细打印出前两个方法和 return 值,但随后它继续并打印出一个 wait() 并且不确定为什么我收到以下错误:
java.lang.NoSuchMethodException: sample.Car.wait(java.lang.String, java.lang.Integer)
关于为什么循环不以仅打印和 return 计算该 Car 中仅有的两个方法的值的任何帮助 class。
getMethods
returns class 可用的所有 public 方法,包括像 wait()
toString()
这样继承的方法,如您所见'接受 (String, Integer)
个参数,这就是为什么
useCases.getMethod(methods[i].getName(), new Class[]{String.class, Integer.class});
无法找到 wait(String, Integer)
。
要仅获取在 Car
class 中声明的方法,请改用 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
每个 Class 都隐式扩展了 Object,因此您也可以获得包含在 Object 中的所有方法。