NoSuchMethodError при вызове метода с аргументами var

У меня есть метод, определенный с помощью 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 at

ОБНОВЛЕНИЕ

После отладки я смог отследить причину и исправить ее.

myMethod принадлежит другому jar. когда я скомпилировал код своего приложения, помимо упомянутого выше был еще один перегруженный метод.

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

}

Позже этот перегруженный метод удаляется и регенерирует jar, и эта окончательная версия добавляется в war pom.

Я сделал следующее исправление:

Я снова скомпилировал код своего приложения с этой последней версией, и проблема решена.


person kswaughs    schedule 23.05.2016    source источник
comment
Просто используйте один объект varargs. Вы можете проверить длину и забросить позже   -  person OneCricketeer    schedule 23.05.2016
comment
распечатайте еще свой стек и добавьте в стек код, который вызывает myMethod   -  person andy    schedule 23.05.2016
comment
Эта ошибка означает, что вы работаете с версией класса, отличной от той, с которой вы скомпилировали.   -  person VGR    schedule 23.05.2016
comment
Когда я запускаю этот код с моими объектами в Object ..., я не получаю ошибки. Пожалуйста, добавьте еще код :-)   -  person Zin Minn    schedule 23.05.2016


Ответы (2)


Очистите свой проект и попробуйте построить снова. Также вы можете полагаться на файл JAR для компиляции и использования другой версии во время выполнения.

person Sujeet Sinha    schedule 23.05.2016
comment
Такая же версия jar включена в WAR. - person kswaughs; 23.05.2016
comment
Вы проверяли путь к классам? Просто пытаюсь разобраться в проблеме, шаг за шагом ... - person Sujeet Sinha; 23.05.2016

попробуй это

myMethod("ClassName", "methodName", "message", new InstanceOfClass());
person Sumit Bhatt    schedule 23.05.2016