个人博客:haichenyi.com。感谢关注
举个例子
open class Person {
var name: String = ""
var age: Int = 0
var address: String = ""
override fun toString(): String {
return "Person($name)"
}
}
新建一个Person类,有三个属性,重写了toString方法。
这里有个关键字open,只有用open标识的类才能被继承。
var person1 = Person().let {
it.name = "张三let"
it.age = 24
it.address = "浦东新区"
10
}
Log.v("wz", person1.toString())//10
var person2 = Person().run {
this.name = "张思run"
this.age = 25
this.address = "青浦区"
20
}
Log.v("wz", person2.toString())//20
var person3 = Person().also {
it.name = "张武also"
it.age = 26
it.address = "黄浦区"
30
}
Log.v("wz",person3.toString())//Person(张武also)
var person4 = Person().apply {
this.name = "张柳apply"
this.age = 27
this.address = "崇明区"
40
}
Log.v("wz",person4.toString())//Person(张柳apply)
上面打印的结果:
person1——let——10
person2——run——20
person3——also——Person(张武also)
person4——apply——Person(张柳apply)
总结:
- let,run以最后一行的结果为返回值;also,apply返回对象本身。
- 在他们的方法体中,let,also用it代指本身;run,apply用this代指本身。
PS:充分了解他们的用法,以及返回值的区别,可以实现链式调用实现功能模块,使代码清晰,一目了然。
网友评论