如何强制某些方法只对kotlin可见

时间:2017-08-01 02:57:32

标签: java kotlin visible

我希望某些方法仅对kotlin代码可见,而不是对Java代码可见。

例如,这里是一个方法fun method(){},只能在kotlin代码中调用,不能在Java代码中调用。

2 个答案:

答案 0 :(得分:6)

您可以使用@JvmSynthetic注释完全达到您想要的效果。它标记了JVM字节码中带有synthetic flag的元素,它的用法在Java源代码中成为错误(对其他JVM语言不太确定,需要检查,但可能它也会起作用):

@JvmSynthetic
fun f() { /*...*/ }

标记的元素仍然可以在Kotlin中使用。

不幸的是,@JvmSynthetic不能用于标记某个类(它没有CLASS目标。)

查看更多:

答案 1 :(得分:1)

Kotlin stdlib中的某些方法使用inline注释标记为@kotlin.internal.InlineOnly。这使编译器将它们内联到kotlin代码中,而不在JVM类中生成相应的方法。

此技巧用于减少stdlib上的方法计数。这是一种危险的解决方案,如果使用不当,可能会导致单独编译出现问题。

捕获:@kotlin.internal.InlineOnly注释是内部的,只能在标准库中使用。我知道没有计划将其发布到公共API中。

TL; DR:您可以这样做,但前提是您正在为Kotlin stdlib做出贡献