【发布时间】:2016-09-20 08:26:57
【问题描述】:
我有一个用 var args 定义的方法
public static void myMethod(String sourceClass, String sourceFunction,
String message, Object... args) {
}
我以两种方式调用此方法。
myMethod(className, methodName, "List of all users : {}", userLists);myMethod(className, methodName, "consumers of reqID : {} are : {}", reqID, userLists);
我没有收到任何编译错误,但在运行时,第二个方法调用出现以下错误,而第一个方法调用成功执行。
java.lang.NoSuchMethodError: com.example.MyClass.myMethod(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V在
更新
调试后,我可以追查原因并修复它。
'myMethod' 属于不同的 jar。 当我编译我的应用程序代码时,除了上面提到的方法之外,还有另一个下面的重载方法。
public static void myMethod(String processName, String sourceClass, String sourceFunction,
String message, Object... args) {
}
后来这个重载的方法被删除并重新生成了jar,这个最终版本被添加到了war pom中。
我所做的修复是:
我再次用这个最终版本编译了我的应用程序代码,它得到了解决。
【问题讨论】:
-
只使用一个 Object varargs。您可以检查长度并稍后投射
-
打印更多你的堆栈并在堆栈中添加调用myMethod的代码
-
该错误意味着您运行的类版本与编译时所针对的版本不同。
-
当我在 Object... 使用我的对象运行此代码时,我没有收到任何错误。请添加更多代码:-)
标签: java