如何让成员函数和顶级函数在kotlin中共享一个类名?

如何让成员函数和顶级函数在kotlin中共享一个类名?,kotlin,Kotlin,我在Key.kt文件中定义了一个接口Key及其顶级函数: interface Key { //codes... } fun keyOf(vararg content: Any?): Key { //codes... } 因此,在科特林,我可以写: val key = keyOf(...) 但在java中,它是: Key key = KeyKt.keyOf(...) 有点难看。。。因此,我在Key.kt中添加了jvm类名设置: @file:JvmName("Key

我在
Key.kt
文件中定义了一个接口
Key
及其顶级函数:

interface Key {
    //codes...
}

fun keyOf(vararg content: Any?): Key {
    //codes...
}
因此,在科特林,我可以写:

val key = keyOf(...)
但在java中,它是:

Key key = KeyKt.keyOf(...)
有点难看。。。因此,我在
Key.kt
中添加了jvm类名设置:

@file:JvmName("Keys")
@file:JvmMultifileClass
现在它变成了:

Key key = Keys.keyOf(...)
嗯,仍然是多余的,所以我将java的
keyOf
函数重命名为:

@JvmName("of")
现在看来很简单:

Key key = Keys.of(...)
但是,事实上,我最喜欢的是

Key key = Key.of(...)
没有伴奏对象是否可能?

接口键{
伴星{
@JvmStatic
@JVM名称(“of”)
fun keyOf(vararg内容:有吗?):键{
...
}
}
}
//Kotlin
导入Key.keyOf
关键字(…)
//Java
(…)的键
如果您*真的
keyOf()
是Kotlin中的顶级函数,那么您可以分别为Kotlin和Java定义函数

接口键{
伴星{
@JvmStatic
@已弃用(“不适用于Kotlin”,level=DeprecationLevel.HIDDEN)//对Kotlin源不可见
乐趣(vararg内容:有吗?):关键{
...
}
}
}
@JVMS合成//对Java源代码不可见
fun keyOf(vararg内容:有吗?):键{
...
}

为什么不使用伴生对象?这是通常的方法。@gidds因为IDEA不能自动导入伴随函数作为顶级函数,所以应该导入它manually@Deprecated(“不适用于Kotlin”,level=DeprecationLevel.HIDDEN)将同时在Kotlin和java中隐藏(在kotlin1.4中)@FredSuvn哎呀,忘了
HIDDEN
还将
ACC\u SYNTHETIC
设置为字节码。请尝试
DeprecationLevel.ERROR