Авторы наворотили безумную программу, высосанную из пальца, так как нормальные программисты так не пишут. Вкратце, рассмотрим следующий код:
public class UnwelcomeGuest {
private static final long ID;
static {
try {
ID = getID(); // can throw an exception
} catch (Exception exception) {
ID = -1;
}
}
}
Проблема тут в том, что blank final поле может быть инициализирована только в том месте программы, где она действительно неинициализирована. Но компилятор не может определить, что первое присваивание недостижимо. Авторы рекомендуют создать статический метод для вычисления значения поля:
public class UnwelcomeGuest {
private static final long ID = calcID();
private static long calcID() {
try {
return getID(); // can throw an exception
} catch (Exception exception) {
return -1;
}
}
}
Плюсом этого подхода является то, что вычисление значения константы вынесено в отдельный метод, для которого можно написать документацию (что, как и почему)...
Комментариев нет:
Отправить комментарий