Это пример из реального мира, некоторые классы класса Hibernate представляют класс Antlr и пытаются заполнить какое-то поле, которое было введено только в последней версии Antlr.Убедитесь, что суперкласс суперсовременного исполнения верен
HibernateClass ---subclasses---> AntlrClass
HibernateClass uses AntlrClass.fieldX
Если кто-то разворачивает во время выполнения старой библиотеки Antlr, это суперкласс поле не будет существовать и NoSuchFieldError
будет выброшен.
Что такое стандартный способ Java/JVM, чтобы убедиться, что суперкласс, который вы динамически связываете во время выполнения, является совместимой версией?
Ну, что вы ** хотите ** произойти, когда используется неправильная версия класса? Я серьезно сомневаюсь, что вы могли бы сделать гораздо лучше, чем ошибка. В лучшем случае вы можете влиять на *, когда * возникает ошибка (поместите первый доступ в статический блок инициализатора, и вы убедитесь, что это произойдет, когда класс загружен). –
Вы хотите поймать ошибку, когда приложение инициализируется, например. «несовместимый JAR» или что-то в этом роде. Возможно, вы ищете определенный диапазон версий классов. Возможно, вы захотите соответствующим образом адаптировать свой код. – Nick