【问题标题】:Kotlin: Visibility modifier changes type of anonymous objectKotlin:可见性修饰符更改匿名对象的类型
【发布时间】:2019-03-24 08:26:30
【问题描述】:

在以下工作代码中删除 myScope(第 4 行)的 private 修饰符将破坏代码。原因是myScope 的类型不断变化。可见性是否设置为private,类型为:anonymous object : Scope。如果没有private,类型将切换为Scope。如何解决此问题?

interface Scope
operator fun<SD: Scope> SD.invoke(block: SD.() -> Unit) = block()

private val myScope = object : Scope {
    fun Int.myScopedExtFunction() = 1337
}

fun usage() {
    myScope {
        1.myScopedExtFunction()
    }
}

Android Studio 中的两个版本:

【问题讨论】:

    标签: kotlin extension-methods class-visibility


    【解决方案1】:

    此行为是设计使然。见documentation

    请注意,匿名对象只能在本地和私有声明中用作类型。如果您使用匿名对象作为公共函数的返回类型或公共属性的类型,则该函数或属性的实际类型将是匿名对象的声明超类型,或者如果您没有声明任何超类型,则为 Any .添加到匿名对象中的成员将无法访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 2015-09-06
      • 2020-12-15
      • 2019-04-01
      • 2021-11-18
      • 1970-01-01
      • 2018-01-02
      相关资源
      最近更新 更多