如何强制某些方法仅对kotlin可见
问题描述:
我想要某种方法仅对kotlin代码可见,而对Java代码不可见。如何强制某些方法仅对kotlin可见
例如,这里是一个方法fun method(){}
,只能在kotlin代码中调用,不能在Java代码中调用。
答
您可以通过使用@JvmSynthetic
注释正是你想要的实现。这标志着与在JVM字节码的synthetic
flag的元素,它的用法成为Java源代码的错误(不太清楚有关其他JVM语言,需要进行检查,但可能它也能发挥作用):
@JvmSynthetic
fun f() { /*...*/ }
的标记的元素仍然可以在Kotlin中正常使用。
不幸的是,@JvmSynthetic
不能用于标记一个类(它没有CLASS
目标)。
查看更多:
What's the intended use of @JvmSynthetic in Kotlin?(没有答案,但效果在问题中所述)
Inline function cannot access non-public-API: @PublishedApi vs @Suppress vs @JvmSynthetic,关于如何可以用于隐藏有效公众内部成员。
答
Kotlin stdlib中的某些方法用@kotlin.internal.InlineOnly
注释标记为inline
。这使编译器将它们内联到kotlin代码中,而不会在JVM类中生成相应的方法。
这个技巧用于减少stdlib的方法数量。这是一个危险的解决方案,如果使用不正确,可能会导致单独编译时出现问题。
捕获:@kotlin.internal.InlineOnly
注释是内部的,只能在标准库中使用。我知道没有将其发布到公共API中的计划。
TL; DR:你能做到这一点,但只有当你正促使科特林STDLIB
非常感谢您的回答! – like