我最近安装了 IntelliJ IDEA 以尝试学习 Kotlin。我已经建立了一个 Kotlin 项目并将 IDEA 配置为使用 Kotlin 插件的最新稳定版本 (1.2.71-release-IJ2018.2-1)。
如果在项目文件中执行以下代码(例如src/main.kt
),则可以正常工作:
sealed class Port
class InputPort<in T> : Port()
class OutputPort<out T> : Port()
但是,如果我尝试在暂存文件中执行此操作,则会收到以下错误:
scratch.kts:2:25: error: cannot access '<init>': it is private in 'Port'
class InputPort<in T> : Port()
^
scratch.kts:2:25: error: this type is sealed, so it can be inherited by only its own nested classes or objects
class InputPort<in T> : Port()
^
scratch.kts:3:27: error: cannot access '<init>': it is private in 'Port'
class OutputPort<out T> : Port()
^
scratch.kts:3:27: error: this type is sealed, so it can be inherited by only its own nested classes or objects
class OutputPort<out T> : Port()
^
从Kotlin 文档中,我可以看到这是因为密封类的这种用法仅在 Kotlin 1.1+ 中有效。这意味着项目文件使用 >= Kotlin 1.1 执行,而暂存文件使用 < Kotlin 1.1。
我想知道为什么 Kotlin 暂存文件似乎没有使用与主要项目文件相同的 Kotlin 版本,以及我如何指定用于执行暂存文件的 Kotlin 版本。
下面是我用于临时文件的运行/调试配置示例:
执行暂存文件时,我看到暂存输出窗格中出现以下命令(为清晰起见更改了格式):
"C:\Program Files\Java\jdk-11\bin\java.exe" ^
-javaagent:C:\Users\<me>\AppData\Local\JetBrains\Toolbox\apps\IDEA-C\ch-0\182.4505.22\lib\idea_rt.jar=53595:C:\Users\<me>\AppData\Local\JetBrains\Toolbox\apps\IDEA-C\ch-0\182.4505.22\bin ^
-Dfile.encoding=windows-1252 ^
-classpath C:\Users\<me>\.IdeaIC2018.2\config\plugins\Kotlin\kotlinc\lib\kotlin-compiler.jar;C:\Users\<me>\.IdeaIC2018.2\config\plugins\Kotlin\kotlinc\lib\kotlin-reflect.jar;C:\Users\<me>\.IdeaIC2018.2\config\plugins\Kotlin\kotlinc\lib\kotlin-stdlib.jar;C:\Users\<me>\.IdeaIC2018.2\config\plugins\Kotlin\kotlinc\lib\kotlin-script-runtime.jar org.jetbrains.kotlin.cli.jvm.K2JVMCompiler ^
-kotlin-home C:\Users\<me>\.IdeaIC2018.2\config\plugins\Kotlin\kotlinc
-script C:/Users/<me>/.IdeaIC2018.2/config/scratches/scratch_2.kts