【问题标题】:How to force some method to be visible only to kotlin如何强制某些方法仅对 kotlin 可见
【发布时间】:2018-01-07 18:06:57
【问题描述】:

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

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

【问题讨论】:

    标签: java kotlin visible


    【解决方案1】:

    您可以使用@JvmSynthetic 注释准确地实现您想要的。它在 JVM 字节码中用 synthetic flag 标记元素,它的使用在 Java 源代码中变成了一个错误(不太确定其他 JVM 语言,需要检查,但很可能它也可以工作):

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

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

    很遗憾,@JvmSynthetic 不能用于标记类(它没有 CLASS 目标)。

    查看更多:

    【讨论】:

      【解决方案2】:

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

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

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

      TL;DR:你可以做到,但前提是你为 Kotlin 标准库做出贡献

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-30
        • 1970-01-01
        • 2017-05-02
        • 1970-01-01
        • 2010-11-06
        相关资源
        最近更新 更多