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中的两个版本:
这种行为是故意的。见: 请注意,匿名对象只能在本地和私有声明中用作类型。如果将匿名对象用作公共函数的返回类型或公共属性的类型,则该函数或属性的实际类型将是匿名对象的已声明超类型,如果未声明任何超类型,则为任何类型。添加到匿名对象中的成员将无法访问