java - Kotlin如何使用JDK 1.8调用Java 11代码?

标签 java kotlin gradle

我在一个Kotlin项目中玩耍,该项目有一些Java 11调用,并且注意到它似乎可以使用Java 8构建并正常运行。
特别是对Java 11中引入的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()方法,而是在调用可以应用于java.lang.String的Kotlin's isBlank extension function

关于java - Kotlin如何使用JDK 1.8调用Java 11代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63453344/

相关文章:

java - Maven 全新安装无法在项目上执行目标

java - 为什么从 ViewModel 进行调用时,Retrofit enqueue 不起作用?

Android Studio 0.4.+ 自定义调试 keystore

android - Android Studio 0.6.0中的默认sourceSet

android - 如何修复 : Gradle sync failed: Unsupported method: SyncIssue. getMultiLineMessage()

java - 禁用修改\删除 JTextArea 内容(但不插入)

java - eclipse IDE错误警告未使用的字段

java - 通过 Rest Web 服务从服务器上的浏览器文件存储下载

kotlin - 错误: Kotlin :[内部错误] java.rmi.UnmarshalException

android - `when condition` 检查的自定义 lint 规则