Java报NoSuchMethodException的原因是访问了一个不存在的方法名或者参数类型的方法。通常情况下,这种异常是由于使用错误的方法签名或者未找到正确的类或接口引起的。
解决此问题的办法一般是检查方法名和参数,确保它们正确。如果方法签名正确但是仍然出现此异常,可能是比如类路径等问题导致类无法正确加载,此时可以通过修复类路径或者重新编译等方式来解决该问题。
以下是两个示例:
示例一:访问不存在的方法名
public class Test {
public static void main(String[] args) {
String s = "Hello World!";
Method m = null;
try {
m = s.getClass().getMethod("hello", null);
m.invoke(s, null);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
实际上,String类中并没有名为“hello”的方法,因此将报NoSuchMethodException异常。
解决方法是检查有没有使用正确的方法名。
示例二:访问一个不存在的接口引用
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Iterator<Integer> it = (Iterator<Integer>) list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
实际上,List接口中的迭代器返回的是一个Iterator
解决方法是检查是否使用了正确的接口引用类型。