Kotlin中,明白T.()->Unit 、 ()->Unit与(T) -> Unit

计算机软件开发 2024-9-20 11:56:55 31 0 来自 中国
Kotlin比Java更方便的地方,此中之一是可以将函数作为参数。
上面三者都是将函数作为别的函数的参数来利用,其情势固然简单,但明白并不简单。
一、共同点

三者的返回值类似,均为Unit,即没有返回值。
固然有返回值也可以,好比返回一个泛型R,大概是一个具体的值Int等
如:
T.()->R、 ()->R、(T) -> R大概:T.()->Int、 ()->Int、(T) -> Int二、定义情势

可以联合Kotlin自带的作用域函数来明白:
apply:
fun  T.apply(block: T.() -> Unit): T { block(); return this }also:
fun  T.also(block: (T) -> Unit): T { block(this); return this }自定义一个利用()->Unit的例子
inline fun <T> T.doWithTry(block: () -> Unit) {    try {        block()    } catch (e: Throwable) {        e.printStackTrace()    } }三、利用

//定义了一个Person类class Person(val name:String){    var age:Int = 0    var sex:Int = 0}fun test() {    val person= Person("张三")    person.also {        //没有指定参数名字,必须用it代指参数        it.age = 20   //it不能省略        it.sex = 0    //it不能省略    }    //大概    person.also {personValue->        //利用指定的参数名,同样personValue不能省略        personValue.age = 20        personValue.sex = 0    }    person.apply {        //直接访问Person的属性        this.age = 20  //this可以省略        this.sex = 1   //this可以省略    }    person.doWithTry{        //只能通过外部变量来访问Person        person.age = 20        person.sex = 1    }}上面的例子分析白以下几点:
1、T.()->Unit 的函数体中可以直接利用T代表的对象,即用this代表对象
2、(T) -> Unit 将T表现的对象作为实参通过函数参数转达进来,供函数体利用
3、 ()->Unit与T表现的对象没有直接接洽,只能通过外部T实例的变量来访问对象
四:可以如许明白:

T.()->Unit相称于是给类T定义了一个扩展函数,该函数没有形参,没有返回值,固然我们也可以增长参数与返回值,原理是一样的。
正是由于T.()为T的扩展函数,以是可以在函数体里直接访问T对象的属性大概成员函数。
(T) -> Unit与 ()->Unit只是一个平凡的函数,一个带有参数,范例为T,另一个没有参数而已。
(T) -> Unit在利用it表现实参,是Lambda表达式所规定。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-21 21:04, Processed in 0.136939 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表