我最近安装了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
答案 0 :(得分:1)
您的配置没有问题。当前密封的类只能由其自己的Kotlin脚本中的嵌套类继承。
YouTrack中存在一个问题:https://youtrack.jetbrains.com/issue/KT-20180