У меня есть класс, как это:Дополнительный тип поля и кода, безопасен ли он?
class Environment {
somelib.SomeType someOptionalDep = null;
public void doSomething() {
boolean found = false;
try {
Class.forName("somelib.SomeType");
found = true;
} catch (ClassNotFoundException e) {
}
if (found) {
someOptionalDep = new somelib.SomeType();
// ...
}
}
}
somelib
является дополнительным пакетом: во время компиляции существует, но исключен из базовой баночки. Фактически, этот код работает без зависимости (Oracle Java HotSpot 1.8.0_111 на Debian 8), но действительно ли это безопасно?
Примечание: Я знаю, что я мог бы обернуть дополнительные функциональные возможности в отделенных классах, но это whould быть слишком сложными в некоторых случаях.
EDIT:
Из документации Oracle о NoClassDefFoundError
:
Брошенный, если виртуальная машина Java или
ClassLoader
экземпляр пытается загрузить в определении класса (как часть нормального метода вызов или как часть создания нового экземпляра с использованием выраженияnew
), и определение класса не может быть найдено.Определение класса поиска было выполнено, когда выполняемый в данный момент класс был скомпилирован, но определение больше не может быть найдено.
К сожалению, в нем явно не сказано ничего о декларации или загруженном, но не выполненном коде.
В чем смысл? Почему бы просто не поймать 'NoClassDefFoundError'? – shmosel
Является ли объявление поля безопасным с потенциально несуществующим типом? –