如何在 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
我最近安装了 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