You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Kotlin默认将Java方法返回值视为可空,除非标注@NonNull?

解决方案:使用-Xjsr305=strict编译参数

可以通过Kotlin编译器的-Xjsr305=strict参数实现你的需求:该参数会强制编译器将未标注空注解的Java方法返回值默认视为可空类型,仅当Java方法标注了@NonNull(或兼容的JSR-305注解如@Nonnull)时,才会被识别为非空类型。

效果验证

开启该参数后,你的Kotlin调用代码会发生以下变化:

  • 原无空检查代码会触发编译报错:
    fun main() {
      val str = JavaClass().string
      str.length // 编译错误:无法在可空类型String?上直接调用length
    }
    
  • 必须修改为带空检查的写法(符合你的预期):
    fun main() {
      val str = JavaClass().string
      str?.length // 安全调用,编译通过
    }
    

配置方式

根据你的构建工具,添加该编译参数:

Gradle(Kotlin DSL)

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs += "-Xjsr305=strict"
    }
}

Gradle(Groovy DSL)

tasks.withType(KotlinCompile) {
    kotlinOptions {
        freeCompilerArgs += '-Xjsr305=strict'
    }
}

Maven

在kotlin-maven-plugin的配置中添加:

<configuration>
    <args>
        <arg>-Xjsr305=strict</arg>
    </args>
</configuration>

补充说明

  • 该参数支持所有常见的非空注解,包括JSR-305的javax.annotation.Nonnull、Android的androidx.annotation.NonNull、Guava的com.google.common.annotations.NonNull等。
  • 如果需要更温和的模式,可以使用-Xjsr305=warn:此时未标注的Java方法返回值仍视为非空,但编译器会给出警告提示你可能存在空安全风险。

内容的提问来源于stack exchange,提问作者ChenRenJie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:16:02