4

在以下工作代码中删除(第 4 行)的private修饰符将破坏代码。myScope其原因是不断变化的类型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 中的两个版本: 在此处输入图像描述

4

1 回答 1

4

此行为是设计使然。请参阅文档

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

于 2018-10-19T12:47:13.077 回答