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

时间:2018-10-16 08:46:01

标签: intellij-idea kotlin scratch-file sealed-class

我最近安装了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中,我可以看到这是因为这种密封类的用法仅在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

1 个答案:

答案 0 :(得分:1)

您的配置没有问题。当前密封的类只能由其自己的Kotlin脚本中的嵌套类继承。

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