如何解决Kotlin如何使用JDK 1.8调用Java 11代码?
我当时正在玩一个Kotlin项目,该项目有一些Java 11调用,并且注意到它似乎可以使用Java 8正常构建和运行。
尤其是对Java引入的java.lang.String#isBlank()
的调用。
我正在使用Gradle构建和运行测试。 Build JDK设置为JDK 1.8,而Kotlin编译目标也是1.8:
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions {
freeCompilerArgs += listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}
gradle -v
------------------------------------------------------------
Gradle 6.6
------------------------------------------------------------
Build time: 2020-08-10 22:06:19 UTC
Revision: d119144684a0c301aea027b79857815659e431b9
Kotlin: 1.3.72
Groovy: 2.5.12
Ant: Apache Ant(TM) version 1.10.8 compiled on May 10 2020
JVM: 1.8.0_265 (AdoptOpenJDK 25.265-b01)
OS: Mac OS X 10.15.6 x86_64
这是一个单元测试,它调用Java 11,但仍可以编译并运行:
import org.junit.jupiter.api.Test
class BlankTest {
@Test
fun testBlank() {
val s = java.lang.String("test string")
val blank = s.isBlank()
println("Input string blank? : $blank")
}
}
这怎么可能?
解决方法
答案是,您实际上并没有使用Java 11的isBlank()
方法,而是在调用Kotlin's isBlank extension function,该方法可以应用于java.lang.String。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。