如何强制某些方法仅对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做出贡献的时候才行

Interesting Posts