【问题标题】:NoSuchMethodError when calling method with var args使用 var args 调用方法时出现 NoSuchMethodError
【发布时间】:2016-09-20 08:26:57
【问题描述】:

我有一个用 var args 定义的方法

public static void myMethod(String sourceClass, String sourceFunction,
        String message, Object... args) {

 }

我以两种方式调用此方法。

  1. myMethod(className, methodName, "List of all users : {}", userLists);

  2. 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


【解决方案1】:

清理您的项目并尝试再次构建。此外,您可能会依赖 JAR 文件在运行时编译和使用不同的版本。

【讨论】:

  • WAR 中捆绑了相同的 jar 版本。
  • 你检查类路径了吗?只是想一步一步解决问题..
【解决方案2】:

试试这个

myMethod("ClassName", "methodName", "message", new InstanceOfClass());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多