gpt4 book ai didi

java - 如何从 Java 访问 Kotlin 的 `backtickedFunctions`?

转载 作者:行者123 更新时间:2023-12-05 01:50:23 24 4
gpt4 key购买 nike

长话短说:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com