Я постоянно сталкиваюсь с небольшими вариациями проблемы на Java и начинаю добираться до меня, и я не могу думать о правильном способе обойти это.
У меня есть свойство объекта, которое является окончательным, но динамическим. То есть, я хочу, чтобы значение было постоянным после назначения, но значение может быть различным для каждой среды выполнения. Поэтому я объявляю переменную уровня класса в начале класса - скажем private final FILE_NAME;
. Затем в конструкторе присваиваю ему значение - скажем FILE_NAME = buildFileName();
Проблема начинается, когда у меня есть код в методе buildFileName()
, который генерирует исключение. Поэтому я пытаюсь сделать что-то подобное в конструкторе:
try{
FILE_NAME = buildFileName();
}
catch(Exception e){
...
System.exit(1);
}
Теперь у меня есть ошибка - "Пустое конечное поле FILE_NAME, возможно, не было инициализировано". Именно здесь я начинаю слегка раздражаться в строгом компиляторе Java. Я знаю, что это не будет проблемой, потому что, если он доберется до улова, программа выйдет... Но компилятор этого не знает и поэтому не разрешает этот код. Если я попытаюсь добавить фиктивное задание в catch, я получу - "Окончательное поле FILE_NAME, возможно, уже было назначено". Я явно не могу назначить значение по умолчанию перед try-catch, потому что я могу назначить его только один раз.
Любые идеи...?