【发布时间】:2018-10-17 05:18:27
【问题描述】:
我正在使用JShell from JDK 11 来试验一些泛型行为。
我想将解释的 java 版本设置为版本 8。这将允许我拥有与 Java Language Specification 8 中定义的相同的类型推断行为。
我该怎么做?
【问题讨论】:
-
我真的怀疑 jshell 是否适合这样的事情。
我正在使用JShell from JDK 11 来试验一些泛型行为。
我想将解释的 java 版本设置为版本 8。这将允许我拥有与 Java Language Specification 8 中定义的相同的类型推断行为。
我该怎么做?
【问题讨论】:
您要应用的标志是:
"-source 8"
将其传递给 JShell 后面的编译器的方法是:
"jshell -C "-source 11"
...但是不行。我刚才试了一下,Jshell解析失败,出现异常。不应该是这样,所以我查看了引发错误的 Arguments 类的代码。事实证明,javac 选项分为不同的类别,只有 BASIC 命令可以通过 JShell (com.sun.tools.javac.main.Option.java:1308)。
设置源标志不属于该组,因此验证器将其抛出,该设置将不会被应用。
如果您想验证这一点,可以尝试将 BASIC 类型的参数传递给 javac,如“-p”,您会看到它正确传递。
【讨论】:
这是不可能的,JShell 工具使用 Java 平台模块系统 (JPMS),它是 java 9 的特性。
【讨论】: