今天仍然在继续看kotlin的内容,突然发现kotlin中匿名对象的使用,刚开始看着有点晕乎但后来发现其实看明白怎么回事就行了,下面总结一下用法。
匿名对象只能用在本地或私有作用域下,如果匿名对象用作共有函数的返回值或用做公有属性那么该函数或公有属性的类型会是匿名对象的超类型,如果你没有声明任何超类型那么就是Any,这个时候你就访问不到在匿名对象生命的元素了。例如以下代码
class AnonymityObjectTest {
private fun foo() = object {
val x: String = "x"
}
//这个函数的作用域是公有的,它的返回值是匿名对象,因为没有声明过任何超类型那么这个函数返回值应该是Any所以返回值是Any不能访问到匿名对象中定义的元素x
fun publicFoo() = object {
val x: String = "x"
}
fun bar() {
val x1 = foo().x
val x2 = publicFoo().x //这里访问不到,因为publicFoo()返回的是匿名对象的超类型Any,所以这会报错,说到不到x
}
}