作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
长话短说:
java 中是否有一个简单的语法来访问 kotlins 反引号函数,例如 fun `if`(){...}
长版:
在 Kotlin 中,可以编写以下类。
class ShapeShifter {
fun speak() { println("Hello fellow hooman") }
fun `speakLikeA🐱`() { println("Meow") }
fun `speakLikeA🐶`() { println("Bwoof !") }
fun `speakLikeA🐧`() { println("NOOT NOOT ! (you would'nt have so much problems with linux ...)") }
}
这会工作得很好......你所有的 kotlin 伙伴都可以像这样以你的所有形式与你交谈:
ShapeShifter().`speakLikeA🐶`() // would work like a charm
但是当与 java-ist muggles 交互时,你的 secret 身份是安全的,因为我很确定 java-ists 只能像这样与你交互:
new ShapeShifter().speak()
我的问题是:有没有办法让 Java 普通人WITHOUT使用诸如内省(introspection)/反射之类的黑魔法来访问你的反引号 kotlin 函数:
var tomJedusor = new ShapeShifter();
ShapeShifter.class.getDeclaredMethod("speakLikeA🐍").invoke(tomJedusor); //the forbidden arcane spell banned from Konoha ...
最佳答案
@JvmName
注释允许您为该方法定义 jvm 名称。
@JvmName("speakLikeACat")
fun `speakLikeA🐱`() { println("Meow") }
@JvmName("speakLikeADog")
fun `speak like a 🐶`() { println("Bwoof") }
现在,您可以从 Java 代码访问该方法。
// .java
shapeShifter.speakLikeACat();
shapeShifter.speakLikeADog();
访问 backticked kotlin 方法,来自 java 的字段只能使用一些 jvm 注释
。 Kotlin 编译器必须遵守 java
语言规范来生成字节码。实际上 java 语言规范不允许此功能。
关于java - 如何从 Java 访问 Kotlin 的 `backtickedFunctions`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73164490/
长话短说: java 中是否有一个简单的语法来访问 kotlins 反引号函数,例如 fun `if`(){...} 长版: 在 Kotlin 中,可以编写以下类。 class ShapeShifte
我是一名优秀的程序员,十分优秀!