0

我最近安装了 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
4

1 回答 1

1

你的配置没有问题。目前密封类只能被 Kotlin 脚本中自己的嵌套类继承。

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

于 2018-10-16T09:18:29.687 回答