我了方便大家阅读很不至于疲劳我们把整个拆分为两步分,接着下部分我们将with
with
with同样也是标准库的一个扩展,不同的是它不是功能性的扩展,他只是起一个承接的作用方便大家标识和转呈
代码语言:javascript复制fun withFun() {
class Configuration(var host: String, var port: Int)
val configuration = Configuration(host = "127.0.0.1",
port = 9800)
with(configuration) {
}.run {
}.let {
}
with("A"){
this.isBlank()
}
print("${configuration}")
}
上栗中我们分别举了一个自定义类和一个String的粒子,我们看到,内部同样是采用的this作为原有实例的引用,我们很方便的机型原有实例的调用
也就是说:with其实没啥具体的功能性作用,只是为了书写方便美观使代码更加美观……
apply
apply这个比较重要了,相信对于有JS基础的朋友这个特性并不陌生:applay内部执行一个block并且返回实例itself(自身)。这个在前面的几个中有很多的区别之前的都是返回一个object实例,也就是说这个处理返回数据并且返回的是自身,因此这个也早就了了它的作用目的可以作为数据初始化使用
代码语言:javascript复制fun applyFun() {
data class Person(
var name: String,
var age: Int,
var about: String
){
constructor():this("",0,"")
}
val jake = Person()
val desc = jake.apply {
this.name = "Jack"
this.age = 30
this.about = "Android developer"
}.toString()
println(desc)
}
上栗中我们实例化了一个Person的无参构造的实例,然后使用apply进行其余属性的初始化赋值
also
与apply类似also也是对实例的扩展,它同样执行的是block和进行返回。不同的是它采用it走位引用,因此它多用于内部传值。比如说在链式调用中进行日志输出查看、
代码语言:javascript复制fun alsoFun() {
class Person(val name: String, val age: Int, val about: String)
val jacke = Person("Jack", 30, "Amdroid developer")
.also {
print("$it")
}
}
到此我们今天的标准库扩展就告一段落,下面是一个综合的调用
代码语言:javascript复制 val jacke = Person("Jack", 30, "Amdroid developer")
.also {
print("$it")
}
with(Person()) {
this.apply {
name = "Lee"
age = 30
about = "iOS/Android developer"
}.run {
hell()
}
}.also {
print(it)
}