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 == 0java
// Java 调用
StringUtils.isEmpty("abc");