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

How to force some method to be visible only to kotlin

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

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

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

中生成相应的方法

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

问题:@kotlin.internal.InlineOnly 注释是内部注释,只能在标准库中使用。我知道没有计划将它发布到 public API.

TL;DR:你可以做到,但前提是你要为 Kotlin stdlib 做出贡献

你可以通过在 JVM 字节码中使用 @JvmSynthetic annotation. It marks the element with the synthetic flag 来实现你想要的,并且它的用法在 Java 源中成为错误(不太确定其他 JVM 语言,需要检查,但它也可能会起作用):

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

被标记的元素在Kotlin中仍然可以正常使用

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

查看更多:

  • (这里没有答案,但是问题中描述了效果)

  • ,关于如何有效隐藏public内部成员。