如何强制某些方法仅对kotlin可见
我想要一些方法只对kotlin代码而不是Java代码可见。
例如,下面是一个fun method(){}
,只能在kotlin代码中调用,不能在Java代码中调用。
你可以使用@JvmSynthetic
注解来实现你想要的。 它用JVM字节码中的synthetic
标志来标记元素,它的使用在Java源代码中是错误的(对其他JVM语言不太确定,需要检查,但是可能也会起作用):
@JvmSynthetic fun f() { /*...*/ }
标记的元素仍然可以在Kotlin中正常使用。
不幸的是, @JvmSynthetic
不能用来标记一个类(它没有CLASS
目标)。
查看更多:
-
Kotlin中@JvmSynthetic的用途是什么? (在那里没有答案,但效果在问题中描述)
-
内联函数不能访问非公共API:@PublishedApi vs @Suppress vs @JvmSynthetic ,关于如何有效地隐藏公共内部成员。
Kotlin stdlib中的一些方法用@kotlin.internal.InlineOnly
注释inline
标记。 这使编译器将它们内联到kotlin代码中,而不会在JVM类中生成相应的方法。
这个技巧用于减少stdlib的方法数量。 这是一个危险的解决方案,如果使用不当,可能会导致单独编译时出现问题。
catch: @kotlin.internal.InlineOnly
注释是内部的,只能在标准库中使用。 我知道没有将其发布到公共API中的计划。
TL; DR:你可以这样做,但只有当你对Kotlin stdlib做出贡献的时候才行