2016-05-23 51 views
0

我有變參的NoSuchMethodError與變參時調用方法

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 at

UPDATE

調試後,我看能追查原因並修復它。

'myMethod'屬於不同的jar。 當我編譯我的應用程序代碼時,還有另一個重載方法與上面提到的一起存在。

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

} 

後來這個重載的方法被刪除並重新生成的jar和這個最終版本被添加到war pom中。

修復我做的是:

我再次編譯我的應用程序代碼與此最終版本,它解決。

+0

只需使用一個對象可變參數。您可以檢查長度並稍後投射 –

+0

打印更多堆棧並在堆棧中添加調用myMethod的代碼 – andy

+0

該錯誤表示您正在運行的版本與您編譯的版本不同。 – VGR

回答

1

清理您的項目並嘗試再次構建。此外,您可能依賴JAR文件在運行時編譯和使用不同的版本。

+0

WAR中捆綁了相同的jar版本。 – kswaughs

+0

您是否檢查了類路徑?試圖一次性找出問題的一步。 –

0

試試這個

myMethod("ClassName", "methodName", "message", new InstanceOfClass()); 
相關問題