Kotlin 内联函数 apply、let、run、with、also区别

Apply

  1. 用this代表当前引用对象;
  2. 调用其方法时,this可省略;
  3. 一定有返回值,且返回值为当前对象
  4. 对象可判空
       val data = DataCenter()
        /**
         * 特性
         1. 用this代表当前引用对象;
         2. 调用其方法时,this可省略;
         3. 一定有返回值,且返回值为当前对象;
         4. 对象可判空;
         */
        data?.apply {
            this.setUid("1111")
            setUid("1111")
        }.setUid("1111")

Let

  1. 用it代表当前引用对象;
  2. 调用其方法时,it不可省略;
  3. 函数最后一行为返回值,可有可无;
  4. 对象可判空;
        val data = DataCenter()
        /**
        特性
        1. 用it代表当前引用对象;
        2. 调用其方法时,it不可省略;
        3. 函数最后一行为返回值,可有可无;
        4. 对象可判空;
         */
        val value = data?.let {
            it.setUid("1111")
            
            // 不写则无返回结果
            "返回结果"
        }

Run

  1. 用this代表当前引用对象;
  2. 调用其方法时,this可省略;
  3. 函数最后一行为返回值,可有可无;
  4. 对象可判空;
        val data = DataCenter()
        /**
        特性
        1. 用it代表当前引用对象;
        2. 调用其方法时,it不可省略;
        3. 函数最后一行为返回值,可有可无;
        4. 对象可判空;
         */
        val value = data?.run {
            this.setUid("1111")
            setUid("1111")
            
            // 不写则无返回结果
            "返回结果"
        }

With

  1. 用this代表当前引用对象;
  2. 调用其方法时,this可省略;
  3. 函数最后一行为返回值,可有可无;
  4. 对象不可判空;
        val data = DataCenter()
        /**
        特性
        1. 用it代表当前引用对象;
        2. 调用其方法时,it不可省略;
        3. 函数最后一行为返回值,可有可无;
        4. 对象不可判空;
         */
        val value = with(data) {
            this.setUid("1111")
            setUid("1111")
            
            // 不写则无返回结果
            "返回结果"
        }

Also

  1. 用it代表当前引用对象;
  2. 调用其方法时,it不可省略;
  3. 一定有返回值,且返回值为当前对象;
  4. 对象可判空;
        val data = DataCenter()
        /**
        特性
        1. 用it代表当前引用对象;
        2. 调用其方法时,it不可省略;
        3.  一定有返回值,且返回值为当前对象;
        4. 对象可判空;
         */
        data?.also {
            it.setUid("1111")
        }.setUid("1111")

总结

apply let run with also
函数体对象 this it this this it
对象是否可省 不可 不可
返回值 当前对象 任何对象 任何对象 任何对象 当前对象
可否判空 可以 可以 可以 不可以 可以

你可能感兴趣的:(Kotlin 内联函数 apply、let、run、with、also区别)