尝试从Java实例化Kotlin类时出错

我试图从Java实例化Kotlin类,但每次我尝试用Maven编译时,我得到的错误cannot find symbol

 class ConfigCommand(private val game: Game) : Command("config", "") { init { addAliases("cfg") } override fun getRequiredRank(): Rank? { return null } override fun getDescription(): String { return "Shows the config for the game" } @Throws(CommandException::class) override fun execute(sender: CommandSender, args: Array<String>): Boolean { if (args.isEmpty()) { if (sender !is Player) throw NoConsoleAccessException() sender.openInventory(ConfigGUI(game).build()) return true } return false } } 

不知道为什么没有正确格式,但无论如何,在我将它转换为Kotlin类它工作之前,但我需要在我的主类,这是一个Java类注册此命令。 当我尝试从Java类实例化Kotlin类时,IDE中没有错误,但是当我去编译Maven尖叫

 cannot find symbol [ERROR] symbol: class ConfigCommand 

3 Solutions collect form web for “尝试从Java实例化Kotlin类时出错”

我仍然在搞清楚Kotlin,但是我试图根据你的例子通过一些排列组合。 我很容易能够根据你的哈斯宾狗创建你的问题。

你是对的,把<phase>改成process-sources让我的测试代码在Maven中编译,但是我(老实说)不能总是记住所有的Maven阶段,所以我不会亲自在没有更多研究的情况下转换为流程源,特别是IntelliJ工具依赖于compile阶段。

在使用我自己的interop示例之后,似乎是关键的(缺少工具默认设置),piece是作为<build>的顶级子元素的<sourceDirectory>元素,如下所示:

 <build> <sourceDirectory>src/main/java</sourceDirectory> <plugins> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> 

当我运行mvn compile terminal命令时,将<sourceDirectory>作为<build>下的顶级元素添加,使得我的Java可以被编译为Kotlin互操作代码。 当我将“java”目录中的源文件混合为包含Java和Kotlin文件时,情况就是如此。

作为一个侧面说明(我不明白为什么,当我写这个),当我添加“Kotlin”作为我的类名称的一部分到我的Kotlin源,我不需要添加<sourceDirectory>元素…

经过这个页面多次,并意识到我没有做错什么,我开始只是搅乱我的POM,并最终通过改变Kotlin编译阶段的工作process-sources

maven-compiler-plugin添加了在相应阶段中首先运行的默认执行default-compiledefault-testCompile

为了在Java代码中使用Kotlin类,需要在运行Java编译器之前运行Kotlin编译器。 一种方法是将其执行安排到process-sources阶段。 另一种方法是在执行Kotlin插件之后,取消调度Java插件的默认执行并安排新的执行。

Java插件的默认执行在pom.xml的这一部分被关闭:

  <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <executions> <!-- Replacing default-compile as it is treated specially by maven --> <execution> <id>default-compile</id> <phase>none</phase> </execution> <!-- Replacing default-testCompile as it is treated specially by maven --> <execution> <id>default-testCompile</id> <phase>none</phase> </execution> ... </executions> </plugin> 

然后添加新的执行:

  <execution> <id>java-compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>java-test-compile</id> <phase>test-compile</phase> <goals> <goal>testCompile</goal> </goals> </execution> 

完整的例子显示在这里: https : //kotlinlang.org/docs/reference/using-maven.html#compiling-kotlin-and-java-sources

  • 在kotlin中使用意外的令牌(在同一行上使用;来分隔表达式)
  • Kotlin类文件不能在IntelliJ for JUnit中运行
  • kotlin.TypeCastException:null不能转换为非空类型com.midsizemango.databasekotlin.Note
  • “将java代码(不是文件)转换成kotline”
  • 在串的美元的符号字符
  • 如何在Kotlin中初始化数组?
  • Android中的与Kotlin的AsyncTask
  • Android Keystore?.getKey在某些设备上返回null
  • 如何访问Kotlin中的内部对象的成员
  • 什么是Kotlin类初始化语义?
  • kotlin中的全局扩展函数
  • Kotlin language will be the best programming language for Android.