Skip to content

Java 互操作注解

源:Kotlin-Java 互操作指南

Kotlin 提供了丰富的注解来优化 Java 调用体验。

核心注解速查

注解作用Java 侧效果
@JvmStatic静态化成员Obj.fun() 而非 Obj.INSTANCE.fun()
@JvmOverloads生成重载生成多个参数递减的方法
@JvmField暴露字段public 字段而非 Getter/Setter
@JvmName重命名解决签名冲突或美化命名
@Throws声明异常强制 Java 捕获 Checked Exception

字段暴露:@JvmField

破坏封装性

使用 @JvmField 会将属性暴雷为 Java 的 public 字段。这意味着失去了 Kotlin 属性 Getter/Setter 的保护(例如你无法在 Setter 中添加校验逻辑)。仅在纯数据对象 (DTO) 或常量中使用。

kotlin
// Kotlin
object AppConfig {
    @JvmField val MAX_COUNT = 100
}

// Java
int max = AppConfig.MAX_COUNT; // 直接访问,无 Getter 开销

文件名优化:@file:JvmName

默认情况下,Kotlin 顶层函数会编译进 文件名Kt.java

kotlin
@file:JvmName("StringUtils") // 放在文件首行
@file:JvmMultifileClass // 允许跨文件合并

package com.example

fun isEmpty(s: String?) = s == null || s.length == 0
java
// Java 调用
StringUtils.isEmpty("abc");