NoSuchFieldError но поле есть - PullRequest
       0

NoSuchFieldError но поле есть

2 голосов
/ 07 апреля 2011

Я только что обновил библиотеку, а другая начала выдавать NoSuchFieldError. Было бы хорошо, если бы поле было убрано. Но это остается. Это просто устарело.

Hibernate.TIMESTAMP.nullSafeGet(null, null); // << works

new PersistentDateTime().nullSafeGet(null, null); // << throws NoSuchFieldError

где метод nullSafeGet имеет:

Hibernate.TIMESTAMP.nullSafeGet(resultSet, string); 

(конечно, поле, которое не найдено - TIMESTAMP)

правильная версия библиотеки находится на пути к классам (иначе мой ручной тест тоже не сработал бы)

Почему это происходит?

Обновление: я создал новый класс, переопределив старый и определив тот же метод с точно таким же кодом, и теперь он работает. Есть идеи, что должно происходить в байт-коде?

Ответы [ 2 ]

4 голосов
/ 29 июля 2011

Джошуа Блох объяснил это в своей короткой презентации - static final поля копируются в клиентскую библиотеку, поэтому ее следует перекомпилировать при изменении константы.

1 голос
/ 07 апреля 2011

Единственное, о чем я могу думать, это то, что PersistentDateTime() возвращает экземпляр некоторого класса, который был скомпилирован с другой версией Hibernate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...