ITPub博客

首页 > 移动开发 > ANDROID > 彻底理解 Kotlin 中的函数参数:T.()->Unit、() -> Unit、(T)->Unit

彻底理解 Kotlin 中的函数参数:T.()->Unit、() -> Unit、(T)->Unit

ANDROID 作者:careerkr 时间:2025-12-11 11:26:43 30 删除 编辑

Kotlin比Java更方便的地方,其中之一是可以将函数作为参数。

上面三者都是将函数作为其它函数的参数来使用,其形式虽然简单,但理解并不简单。

>(顺便吆喝一句,民族企业核心部门年底前的一波岗,base武汉、深圳、苏州等地,前、后端or测试>>>[ 机会];语言:Java、Js、测试、python、ios、安卓、C++等!


一、共同点

三者的返回值相同,均为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表达式所规定。


作者:竖起大拇指

链接:https://www.jianshu.com/p/fdf21e70777c

来源:简书


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048457/viewspace-3104943/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2025-11-21

  • 博文量
    61
  • 访问量
    69182