如何在Java中访问Kotlin的反引号函数(backtickedFunctions)
如何在Java中直接调用Kotlin的反引号函数
核心结论
无需反射,通过两种常规方式即可实现:
1. 直接调用(Java 9及以上版本)
Kotlin编译反引号包裹的函数时,生成的字节码方法名就是反引号内的原始内容(包括emoji、特殊字符)。Java 9及以上版本支持Unicode标识符,因此可以直接在Java代码中调用:
new ShapeShifter().speakLikeA🐶();
只要你的开发环境(IDE、编译器)支持Unicode字符输入,这种方式最简洁直接。
2. 指定Java兼容别名(兼容所有Java版本)
如果团队使用的Java版本低于9,或不想在Java代码中使用特殊字符,可以在Kotlin函数上添加@JvmName注解,指定一个Java友好的方法名:
class ShapeShifter { fun speak() { println("Hello fellow hooman") } @JvmName("speakLikeACat") fun `speakLikeA🐱`() { println("Meow") } @JvmName("speakLikeADog") fun `speakLikeA🐶`() { println("Bwoof !") } @JvmName("speakLikeAPenguin") fun `speakLikeA🐧`() { println("NOOT NOOT ! (you would'nt have so much problems with linux ...)") } }
之后Java开发者就能用常规标识符调用:
new ShapeShifter().speakLikeADog();
补充说明
- 针对反引号包裹Java关键字的函数(比如
funif(){...}),同样可以用@JvmName指定别名,例如@JvmName("executeIf"),Java中直接调用executeIf()即可。 - 上述两种方法均属于Kotlin与Java互操作的标准特性,完全符合语言设计规范,无需依赖反射等非常规手段。
内容的提问来源于stack exchange,提问作者Ar3s
相关产品推荐
相关产品推荐

