2009-05-14 5 views
2

Я успешно реализовал метод reflectionEquals со списком исключенных полей.Почему мой метод бросает NoSuchMethodError?

return EqualsBuilder.reflectionEquals(this, obj, new String[] {"files", "notes", "status"}); 

Однако, недавно я скомпилирован свою программу на Java 1.5 и теперь я получаю следующее сообщение об ошибке, когда программа попадает в указанную выше строку:

java.lang.NoSuchMethodError: org.apache.commons.lang.builder.EqualsBuilder.= reflectionEquals(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/String;)Z

Если кто-нибудь имеет представление о том, почему метод не есть во время выполнения, я был бы признателен

ответ

0

Возможно, у вас есть более старая версия на пути к пути выполнения.

Получить последнюю версию Apache Commons Lang

1

Это, скорее всего, проблема вар арг. Обязательно перекомпилируйте все в java 1.5 и убедитесь, что вы запускаете его на java 1.5, и убедитесь, что вы ссылаетесь на одну и ту же банку при компиляции, как во время выполнения.

+0

Я сомневаюсь, что, так как его последний аргумент является массивом кроме объекта. Обычно вы сталкиваетесь с проблемой при использовании Object [] или при использовании null (что может вызвать неоднозначные конструкторы) – mihi

8

Кажется, что когда-либо возникало любое несоответствие NoSuchMethodError, которое, как оказалось, было несоответствием между версией внешней библиотеки в пути к классам во время компиляции и версией библиотеки в пути к классам во время выполнения (т. Е. в этом случае у вас будет другая версия apache commons по вашему пути к классу при компиляции приложения, чем при ее запуске.)

Метод был определенно там, когда ваш код был скомпилирован - или ошибка компилятора были брошены.

Проверьте версии commons-lang.jar на ваших дорожках классов - я уверен, вы обнаружите несоответствие.

Стоит отметить, что это НЕотсутствующий файл банку - (., Может быть, в конце концов, за которым следует NoClassDefFoundError), что бы бросить ClassNotFoundException

Смежные вопросы