欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > kotlin @JvmStatic注解的作用和使用场景

kotlin @JvmStatic注解的作用和使用场景

2025/5/15 22:41:53 来源:https://blog.csdn.net/weixin_37639900/article/details/147798749  浏览:    关键词:kotlin @JvmStatic注解的作用和使用场景

1. @JvmStatic 的作用

@JvmStatic 是 Kotlin 提供的一个注解,用于在 JVM 上将伴生对象(companion object)中的方法或属性暴露为 Java 静态方法或字段

  • 作用对象:只能用在 companion object 中的函数或属性。
  • 效果
    • 在 Java 中可以直接通过类名调用该方法,而不需要先创建实例。
    • 编译后生成 public static final 方法或字段。

2. 使用场景

✅ 场景 1:Java 调用 Kotlin 工具方法

当 Kotlin 中定义了一些工具类的静态方法,Java 代码希望像调用普通静态方法一样使用它们。

class StringUtils {companion object {@JvmStaticfun isEmpty(str: String?): Boolean {return str == null || str.isEmpty()}}
}

Java 中调用方式:

boolean empty = StringUtils.isEmpty("hello");

如果不加 @JvmStatic,Java 必须这样调用:

boolean empty = StringUtils.Companion.isEmpty("hello");

✅ 场景 2:实现单例模式并提供 Java 静态访问方式

结合 @JvmStaticobject 声明,可以更自然地在 Java 中访问 Kotlin 单例。

object Logger {@JvmStaticfun log(message: String) {println("Log: $message")}
}

Java 调用:

Logger.log("This is a message");

✅ 场景 3:与 Android Framework 兼容

Android 框架中很多 API 依赖 Java 静态方法,如 ActivityServiceBroadcastReceiver 等组件中调用工具类时,使用 @JvmStatic 可以提升兼容性和可读性。


3. 注意事项

注意点说明
仅适用于 companion object 成员不可用于普通对象或类成员
不能重载 by name only如果两个方法签名相同,仅靠 @JvmName@JvmStatic 会编译失败
@JvmName 可组合使用可同时修改方法名和生成静态方法

4. 对比不加 @JvmStatic

使用方式是否需要 .Companion 访ixJava 调用是否简洁
@JvmStatic❌ 不需要✅ 简洁
@JvmStatic✅ 需要 ClassName.Companion.method()❌ 不友好

5. 总结

功能描述
作用将 Kotlin companion object 中的方法/属性标记为 Java 静态方法
适用场景Java/Kotlin 混合项目、工具类、单例、Android 开发
推荐使用方式在需要被 Java 调用的公共方法上添加

在 Kotlin 与 Java 混合开发中,合理使用 @JvmStatic 可显著提升互操作性,使 Kotlin 更贴近 Java 的调用习惯。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词