如何在 IntelliJ IDEA 中配置用于临时文件的 Kotlin 版本?

How can I configure the Kotlin version used for scratch files in IntelliJ IDEA?

我最近安装了 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 documentation可以看出,这是因为sealed 类的这种用法只在Kotlin 1.1+中有效。这意味着项目文件正在使用 >= Kotlin 1.1 执行,而临时文件正在使用 < Kotlin 1.1.

我想知道为什么 Kotlin 临时文件似乎没有使用与主项目文件相同的 Kotlin 版本,以及我如何指定用于执行临时文件的 Kotlin 版本。

下面是我用于暂存文件的 run/debug 配置示例:

执行临时文件时,我看到临时输出窗格中出现以下命令(为清楚起见更改了格式):

"C:\Program Files\Java\jdk-11\bin\java.exe" ^
    -javaagent:C:\Users\<me>\AppData\Local\JetBrains\Toolbox\apps\IDEA-C\ch-02.4505.22\lib\idea_rt.jar=53595:C:\Users\<me>\AppData\Local\JetBrains\Toolbox\apps\IDEA-C\ch-02.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

这不是您的配置问题。目前sealedclass在Kotlin脚本中只能被自己嵌套class继承。

YouTrack 中存在问题:https://youtrack.jetbrains.com/issue/KT-20180