我希望某些方法仅对kotlin代码可见,而不是对Java代码可见。
例如,这里是一个方法fun method(){}
,只能在kotlin代码中调用,不能在Java代码中调用。
答案 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做出贡献