当前位置: 首页 > news >正文

kotlin JvmName注解的作用和用途

1. @JvmName 注解的作用

@JvmName 是 Kotlin 提供的一个注解,用于在编译为 Java 字节码时自定义生成的类名或方法名

  • 作用对象

    • 文件级别(整个 .kt 文件)
    • 函数、属性、类等成员
  • 主要用途

    • 控制 Kotlin 编译后生成的 JVM 类名和方法名。
    • 避免与 Java 的命名冲突。
    • 提高 Java 调用 Kotlin 代码时的可读性和一致性。

2. 使用场景

✅ 场景 1:修改 Kotlin 文件对应的 JVM 类名

Kotlin 默认会将文件 FileName.kt 编译成 FileNameKt.class
使用 @file:JvmName("CustomName") 可以指定生成的类名为 CustomName.class

@file:JvmName("Stu")
package com.mayh.kotlindemo.kt_step7.kt_annotaionfun getStudentInfo(name: String) {println(name)
}

编译后生成的类名为:Stu.class


✅ 场景 2:修改 Kotlin 函数在 JVM 中的方法名

可以给某个函数添加 @JvmName("customMethodName"),使其在 Java 中调用时使用指定名称。

@JvmName("getSt")
fun getStudentInfo(studentName: String) = println(studentName)

编译后生成的方法名为:public static final void getSt(String studentName)


✅ 场景 3:解决 Java 调用多个同名 Kotlin 文件函数冲突

当多个 Kotlin 文件包含相同包名下的同名顶层函数时,Java 调用可能会冲突。
通过 @file:JvmName 修改生成的类名即可避免冲突。


✅ 场景 4:与 @JvmOverloads@JvmField 等配合使用

在混编项目中,结合其他 JVM 相关注解,统一 Kotlin 和 Java 的接口风格。


3. 注意事项

注意点说明
不能重载 by name only如果两个函数仅通过 @JvmName 改变名字导致签名相同,会编译报错。
避免与 Java 关键字冲突如命名成 Int, String 等会导致错误。
对扩展函数也有效可以为扩展函数指定 JVM 名称,便于 Java 调用。

4. 总结

功能描述
@JvmName on file指定整个 Kotlin 文件编译后的类名
@JvmName on function/property指定该方法/属性在 JVM 中的名称
适用场景Java/Kotlin 混合项目、避免命名冲突、提升可读性
推荐使用方式在需要被 Java 调用的工具类、顶层函数中使用

在 Android 开发或 Java/Kotlin 混合项目中,合理使用 @JvmName 可以让 Kotlin 更好地兼容 Java,提高代码的可维护性和交互性。

相关文章:

  • 游戏引擎学习第264天:将按钮添加到分析器
  • VTK|.obj文件数据处理+Jet/Viridis/CoolToWarm/Grayscale/Rainbow/风格颜色渲染
  • 如何使用极狐GitLab 软件包仓库功能托管 helm chart?
  • 实践005-Gitlab CICD全项目整合
  • Java并发编程几个问题的解答
  • 在登录页面上添加验证码
  • 超详细!RxSwift 中的 BehaviorRelay 使用教程(含原理 + 示例 + 实战)
  • NetSuite 如何得到所有Item最近一次采购订单的货品单价?
  • 不再踩坑!React.memo正确用法及性能优化实战
  • AI时代企业应用系统架构的新思路与CIO变革指南
  • 21、魔法传送阵——React 19 文件上传优化
  • 轻量级证件照制作 AI 工具 HivisionIDPhotos 介绍
  • 单片机自动排列上料控制程序 下
  • DSP28335 串口中断收发及FIFO使用
  • 剖析 FFmpeg:从基本功能到过滤器,实现音视频处理的灵活性
  • 国内云内网接入方案
  • JAVA房屋租售管理系统房屋出租出售平台房屋销售房屋租赁房屋交易信息管理源码
  • linux中的常用命令(一)
  • 运维打铁:服务器分类及PHP入门
  • ElasticSearch基本概念
  • 特朗普政府拟终止太空污染研究,马斯克旗下太空公司将受益
  • 长安汽车辟谣作为二级企业并入东风集团:将追究相关方责任
  • 重庆荣昌机关食堂五一期间受热捧:肉类总消耗2万斤,单日吃卤鹅800只
  • 虚构医药服务项目、协助冒名就医等,北京4家医疗机构被处罚
  • “五一”假期全社会跨区域人员流动量超14.65亿人次
  • 科普|肩周炎的自限性,意味着不治也能自己好?