1 T 的扩展函数
fun <T> T.testFun(
bock: (T) -> Type1
Type2 {
val value:Type2 = ...
bock(value)
return value
}
- bock: (T) :是定义方法getView后面大括号
(1). bock: (T): getView{ it:T }
(2). bock: T.() :getView{ this:T }
(3). bock: () :getView{ } - Type1 :是大括号中最后一行作为返回的类型 注意 Util 没有返回
- Type1 :是函数 getView的返回值类型
- bock(value): 是将getView{ }中对T的设置保存到value中 如果不执行bock 大括号中对T对象的设值将不起作用
2 比如:
-
Type1 、Type1
(1). bock: ()
fun <T> T.testFun(
bock: () -> String
): Int {
return 12
}
val a:Int = 1L.testFun {
val b = 12
""^testFun
}
...
(2). bock: (T)
fun <T> T.testFun(
bock: (T) -> String
): Int {
return 12
}
val a:Int = 1L.testFun { it:Long
val b = 12
""^testFun
}
...
(3). bock: T.()
fun <T> T.testFun(
bock: T.() -> String
): Int {
return 12
}
val a:Int = 1L.testFun { this:Long
val b = 12
""^testFun
}
注意 a 的值永远是12
- bock() 的作用
class User {
var name: String? = null
var age: Int? = 0
}
fun <T> T.testFun(
bock: T.() -> Unit
): T {
return this
}
val a = User().testFun {
name = "----->"
age = 1
}
print(Gson().toJson(a))
打印的是{"name":"","age":0}
改一下
fun <T> T.testFun(
bock: T.() -> Unit
): T {
bock()
return this
}
val a = User().testFun {
name = "----->"
age = 1
}
print(Gson().toJson(a))
打印的是{"name":"YYYYY","age":1}
网友评论