#java
Вопрос:
У меня есть переменная, которая просит меня сделать ее окончательной, но при ее завершении я получаю сообщение об ошибке следующего содержания: «Конечная локальная переменная «enter» не может быть назначена, так как она определена в типе завершения».
Как вы могли объявить такую переменную?
void yyyyyy(ActionEvent event){
final Scanner enter = null;
try{
.
.
.
enter = new Scaner(xxxxx);
}catch(){
....
}finally{
if(enter != null){
}
}
Комментарии:
1. Удалите инициализацию:
final Scanner enter = null
->final Scanner enter;
2. Я думаю, нам нужно посмотреть, где
enter
это будет использоваться.3. проблема в том, что null я использую его в finally, поэтому я не могу вывести оператор null
4. Тогда вам не нужно объявлять его как
final
. Или (определенно) инициализируйте его передtry
. Дело в том, чтоfinal
переменная может быть назначена только один раз.5. Что именно вы подразумеваете под «это просит меня сделать это окончательно»?
Ответ №1:
Прямо сейчас вы объявляете переменную и инициализируете ее одновременно. Поскольку он окончательный, вы не можете присваивать ему значения более одного раза.
Если вы удалите назначение из инициализации, вы все равно не сможете сделать эту переменную окончательной, потому что вы проверяете ее на значение null в блоке finally. Чтобы эта логика работала, переменной должно быть где-то явно присвоено значение null. И это невозможно, потому что блок try может вызвать исключение в первой строке.
Что бы ни требовало от вас сделать переменную окончательной — игнорируйте ее.
Ответ №2:
Ты можешь заставить это работать вот так. Как объясняют некоторые другие ответы, вы не можете дважды присваивать значение конечной переменной.
Вы можете заставить это работать так
void yyyyyy(final ActionEvent event) {
Scanner enter = null;
try {
enter = new Scanner("/");
} catch (final Exception exception) {
} finally {
enter.close();
}
}