IntelliJ中同名Java与Kotlin类单元测试仅执行Java代码如何解决
解决方法
核心原因
你的项目string包下同时存在Java编写的Arrow类和Kotlin编写的同名同JVM名类,JVM类加载时优先加载了先扫描到的Java类编译产物,因此测试始终调用Java实现的逻辑。
可操作步骤
- 移除Java版本的Arrow类源码。你只需将
src/main/java/string/路径下的Arrow.java文件删除,或者在构建配置中标记该Java文件为不参与编译即可,校方要求你无需处理Java代码,删除预留的空Java实现文件属于合规操作。 - 修正Kotlin代码的格式错误。你示例中的Kotlin代码顶部的
@file:JvmName("Arrow")注解前有多余缩进,会导致注解不生效,需要删除缩进,确保注解写在文件最顶部、包声明之前:
@file:JvmName("Arrow") package string fun arrow(length: Int, doubleEnded: Boolean, doubleLine: Boolean): String { // 此处编写你的实现逻辑 return "kotlin" }
- 清理旧编译产物后重新构建。执行构建工具的clean命令清理之前编译生成的class文件(Gradle项目执行
./gradlew clean,Maven项目执行mvn clean,IDEA等IDE可以点击菜单的「清理项目」选项),再重新编译运行测试,此时类路径下仅存在Kotlin生成的Arrow类,测试会自动调用Kotlin实现的方法。
内容的提问来源于stack exchange,提问作者Lexu
相关产品推荐
相关产品推荐

