【问题标题】:final variables are not functioning well in jshell最终变量在 jshell 中无法正常运行
【发布时间】:2018-06-01 12:29:06
【问题描述】:

我正在使用 JDK9 的 jshell。

我刚刚创建了一个最终变量并为其分配了一个值。 在下一行中,我刚刚修改了值。令我惊讶的是,修改最终变量时没有出错。

这里是sn-ps的代码:

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 中使用最终变量?

【问题讨论】:

    标签: final java-9 access-modifiers jshell


    【解决方案1】:

    虽然在顶层创建 final 变量是不应该的。但我想没有严格的方法来限制这种用法。

    来自JShell.eval 周围的文档

    修饰符 publicprotectedprivatestaticfinal 不是 允许在操作级别声明并忽略并发出警告

    同步的、本机的、抽象的和默认的顶级方法不是 允许并且是错误。

    如果声明的先前定义是 覆盖然后会有一个事件显示其状态更改为 OVERWRITTEN,这不会发生在丢弃、拒绝或已经 覆盖声明。

    当您在详细模式下执行jshell 时,上述警告非常明显,如下所示:

    【讨论】:

    • 有没有办法抑制这些警告? jshell -s 仍然打印出来。
    • 我无法用 JShell 16 重现这一点,也许有些事情发生了变化?我没有看到任何警告。你能解释一下如何在 JShell 中使用 final 吗?
    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 2016-03-29
    • 2014-12-07
    • 2021-12-20
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多