Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin:可见性修改器更改匿名对象的类型_Kotlin_Extension Methods_Class Visibility - Fatal编程技术网

Kotlin:可见性修改器更改匿名对象的类型

Kotlin:可见性修改器更改匿名对象的类型,kotlin,extension-methods,class-visibility,Kotlin,Extension Methods,Class Visibility,在以下工作代码中删除myScope(第4行)的private修饰符将中断代码。原因是myScope的类型不断变化。可见性是否设置为private类型为:匿名对象:范围。如果没有private,类型将切换到范围。如何修复此行为 interface Scope operator fun<SD: Scope> SD.invoke(block: SD.() -> Unit) = block() private val myScope = object : Scope { fu

在以下工作代码中删除
myScope
(第4行)的
private
修饰符将中断代码。原因是
myScope
的类型不断变化。可见性是否设置为
private
类型为:
匿名对象:范围
。如果没有
private
,类型将切换到
范围
。如何修复此行为

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()
    }
}
接口范围
操作符fun SD.invoke(block:SD.(->Unit)=block()
private val myScope=object:Scope{
fun Int.myScopedExtFunction()=1337
}
趣味用法(){
myScope{
1.myScopedExtFunction()
}
}
以下是Android Studio中的两个版本:

这种行为是故意的。见:

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