Конечные переменные не работают хорошо в jshell
Я работаю с JShell JDK9.
Я только что создал окончательную переменную и присвоил ей значение. И в следующей строке я просто изменил значение. И, к моему удивлению, не было ошибки при изменении окончательных переменных.
Вот фрагменты кода:
jshell> final int r = 0;
| Warning:
| Modifier 'final' not permitted in top-level declarations, ignored
| final int r = 0;
| ^---^
r ==> 0
jshell> r = 1;
r ==> 1
jshell> System.out.println("r = "+r)
r = 1
Это то, что ожидается от jshell? или есть другой способ работы с конечными переменными в jshell?
1 ответ
При этом создание окончательной переменной на верхнем уровне не предполагается практиковать. Но я думаю, что нет жесткого способа ограничить такое использование.
Из документации вокруг JShell.eval
Модификаторы
public
,protected
,private
,static
, а такжеfinal
не допускаются в декларациях операционного уровня и игнорируются с предупреждением.Синхронизированные, собственные, абстрактные и стандартные методы верхнего уровня не допускаются и являются ошибками.
Если предыдущее определение объявления перезаписывается, то будет происходить событие, показывающее, что его статус изменен на OVERWRITTEN, это не произойдет для отброшенных, отклоненных или уже перезаписанных объявлений.
Вышеуказанное предупреждение достаточно заметно при выполнении jshell
в подробном режиме следующим образом: