Java当中匿名内部类在很多场景下得到了大量的使用,而Kotlin的对象表达式就是为了解决匿名内部类的一些缺陷而产生的
我们来回顾一下匿名内部类:
匿名内部类所提供的功能,对象表达式都可以支持,匿名内部类有的限制,对象表达式可以突破这个限制。
对象表达式的格式:
object[:若干个父类型,中间用逗号隔开]{
}
interface MyInterface{
fun myPrint(i:Int)
}
abstract class MyAbstractClass{
abstract val age:Int
abstract fun printMyAbstractClassInfo()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main10)
val myObject = object : MyInterface {
override fun myPrint(i: Int) {
println("i的值是$i")
}
}
myObject.myPrint(100)
}
这段代码就是一个典型的对象表达式的应用。其实可以理解成一个匿名内部类的意思,都表示实现了一个接口,把接口里面的方法都实现出来,然后返回来一个对象。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main10)
var myObject2 = object {
init {
println("初始化块zhix")
}
var myProperty = "hello world"
fun myMethod() = "myMethod()"
}
myObject2.myMethod()
}
这种是不实现任何接口和不继承任何抽象类的对象表达式
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main10)
var myObject3 = object : MyInterface, MyAbstractClass() {
override fun myPrint(i: Int) {
println("i的值是$i")
}
override val age: Int
get() = 30
override fun printMyAbstractClassInfo() {
println("printMyAbstractClassInfo 执行")
}
}
myObject3.myPrint(200)
myObject3.age
myObject3.printMyAbstractClassInfo()
}
这种是对象表达式的多个父类的情况。
本文地址:https://blog.csdn.net/jingerlovexiaojie/article/details/107365157
如对本文有疑问, 点击进行留言回复!!
idea 访问html页面端口号显示的是63342而不是8080
网友评论