конечные переменные плохо работают в 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?


person KayV    schedule 19.12.2017    source источник


Ответы (1)


При этом создание финальной переменной на верхнем уровне практиковаться не предполагается. Но я думаю, что нет жесткого способа ограничить такое использование.

Из документации по JShell.eval

Модификаторы public, protected, private, static и final не разрешены в объявлениях операционного уровня и игнорируются с предупреждением.

Синхронизированные, собственные, абстрактные методы и методы верхнего уровня по умолчанию недопустимы и являются ошибками.

Если предыдущее определение объявления было перезаписано, то произойдет событие, показывающее, что его статус изменен на ПЕРЕЗАПИСАННЫЙ, этого не произойдет для отброшенных, отклоненных или уже перезаписанных объявлений.

Указанное выше предупреждение хорошо видно, когда вы выполняете jshell в подробном режиме следующим образом:

введите описание изображения здесь

person Naman    schedule 19.12.2017
comment
Есть ли способ подавить эти предупреждения? jshell -s по-прежнему их распечатывает. - person John; 04.09.2018