Казалось бы, иерархия классов со смешанными старыми (очень старыми) более новыми классами хорошо работает в Java 1.4.2, а не в более новой VM.Я хотел бы знать, сталкивался ли кто-нибудь с той же самой проблемой.
Я работаю со старым проектом, есть скомпилированный класс с иерархией, созданной следующим образом:
Базовый класс (Foo1), скомпилированный с помощью промежуточного класса java 1.4 (Foo2), которыйextends Foo1, скомпилированный с помощью промежуточного класса java 1.1 (Foo3), который расширяет Foo2, скомпилированный с hava 1.4 Мой класс (Bar), расширяющий Foo3, в моей папке src, то есть для компиляции и выполнения.
Если язапустить мой проект с Java 1.4, он работает хорошо.Если я запускаю свой проект с Java 1.6 или новее, он возвращает недопустимую подпись для некоторых методов в классе Foo2.
В частности: в следующей строке:
Bar bar = Bar.getBarFromId(currentId);
получить исключение
java.lang.VerifyError: (class: Foo2, method: setIdAzienda signature: (Ljava/lang/String;)V) Incompatible object argument for function call
Если я очищаю и собираю свой проект, в том же месте у меня появляется следующее исключение:
java.lang.VerifyError: (class: Foo2, method: setAziendaKey signature: (Ljava/lang/String;)V) Incompatible object argument for function call
В третий раз ошибка возникает в другом методе:
java.lang.VerifyError: (class: Foo2, method: setOrdinamFaldone signature: (C)V) Incompatible object argument for function call
Метод, который я вызываю (getBarFromId), следующий:
public static Foo3 getBarFromId(String id) {
if (id == null)
return null;
try {
return (Foo3) Foo1.readElementWithKey(Foo3.class, id);
} catch (SQLException e) {
e.printStackTrace();
}
}
Но в трассировке стека исключений не упоминается ни одна строка внутри этой подпрограммы.
NB:Foo1, Foo2 и Foo3 хранятся в банке, я не владелец.JAR-файл очень большой, и я не знаю, является ли это единственным случаем, когда у меня возникает такая проблема или есть много классов для перекомпиляции (у меня нет источников, и иногда декомпиляторы не могут извлечь все методы)