kotlin标准库扩展之 let run apply also(二)

2019-09-17 15:57:24 浏览数 (1)

我了方便大家阅读很不至于疲劳我们把整个拆分为两步分,接着下部分我们将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)
    }

0 人点赞