代码之家  ›  专栏  ›  技术社区  ›  user2340612

Kotlin已弃用的伴生实例

  •  2
  • user2340612  · 技术社区  · 5 年前

    创建一个 private companion object 在科特林,为什么 Companion 静态变量标记为 @Deprecated public 在字节码中?这只是一个“模拟”A的解决方案吗? private 阻止开发人员使用该字段的行为(因为公共伴生对象没有被标记为已弃用)?

    例子:

    科特林

    class MyClassWithCompanion {
        private companion object {
            private val FOO = "FOO"
        }
    }
    

    字节码

    // DEPRECATED
    // access flags 0x20019
    public final static LMyClassWithCompanion$Companion; Companion
    @Ljava/lang/Deprecated;()
    
    1 回复  |  直到 5 年前
        1
  •  3
  •   yole    5 年前

    这个 @Deprecated 注释作为中间解决方案放置,以避免在修复编译器错误时破坏二进制兼容性。当伴生对象是私有的时,不应该将该字段作为公共字段生成,但由于疏忽,它是私有的。在Kotlin 1.4中,它将标记为私有。

    this issue 更多信息。