扩展函数那些事

1 T 的扩展函数

  fun  T.testFun(
        bock: (T) -> Type1
    Type2  {
        val value:Type2  = ...
        bock(value)
        return value
    }
  1. bock: (T) :是定义方法getView后面大括号
    (1). bock: (T): getView{ it:T }
    (2). bock: T.() :getView{ this:T }
    (3). bock: () :getView{ }
  2. Type1 :是大括号中最后一行作为返回的类型 注意 Util 没有返回
  3. Type1 :是函数 getView的返回值类型
  4. bock(value): 是将getView{ }中对T的设置保存到value中 如果不执行bock 大括号中对T对象的设值将不起作用

2 比如:

  1. Type1 、Type1

    (1). bock: ()

 fun  T.testFun(
                bock: () -> String
    ): Int {
           return 12
    }
        
    val a:Int = 1L.testFun { 
           val b = 12
           ""^testFun
    }

...
(2). bock: (T)

    fun  T.testFun(
                bock: (T) -> String
    ): Int {
           return 12
    }
        
    val a:Int = 1L.testFun { it:Long
           val b = 12
           ""^testFun
    }

...
(3). bock: T.()

    fun  T.testFun(
                bock: T.() -> String
    ): Int {
           return 12
    }
        
    val a:Int = 1L.testFun { this:Long
           val b = 12
           ""^testFun
    }

注意 a 的值永远是12

  1. bock() 的作用
class User {
    var name: String? = null
    var age: Int? = 0
}
fun  T.testFun(
  bock: T.() -> Unit
): T {
  return this
}

val a = User().testFun {
  name = "----->"
  age = 1
}
 print(Gson().toJson(a))

打印的是{"name":"","age":0}

改一下

fun  T.testFun(
  bock: T.() -> Unit
): T {
  bock()
  return this
}

val a = User().testFun {
  name = "----->"
  age = 1
}
 print(Gson().toJson(a))

打印的是{"name":"YYYYY","age":1}

你可能感兴趣的:(扩展函数那些事)