Kotlin 中的 appy和with方法

Kotlin 中的 appy和with方法

apply

apply:Calls the specified function block with this value as its receiver and returns this value.

实现:

public inline fun <T> T.apply(block: T.() -> Unit): T { 
    block(); 
    return this 
}

apply为高阶函数,它接受一个参数block,类型为 T.() -> Unit ( function-with-receiver) 在apply的函数体内,调用了传入的block这个函数,然后返回调用apply函数的对象实例。

//调用方法, 省去了 this
fun getDeveloper(): Developer {
    return Developer().apply {
        developerName = "Amit Shekhar"
        developerAge = 22
    }
}

with

Calls the specified function block with the given receiver as its receiver and returns its result.

它的实现代码也只有一行

public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()

with为高阶函数,接收两个参数:receiver,类型为T,block 类型为 T.() -> R,为 function-with-receiver type,只能被T类型的对象调用.

同样,在block方法体内,可以通过this来调用到receiver。

with返回的类型为R,和block的返回类型相同

fun getPersonFromDeveloper(developer: Developer): Person {
    return with(developer) {
        Person(developerName, developerAge)
    }
}

参考: learn kotlin apply vs with what is a receiver in kotlin What is a purpose of Lambda's with Receiver? https://www.jianshu.com/p/22c743dca2d4

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 重拾Kotlin(18)-运算符重载

    Kotlin 允许为类型提供预定义的操作符实现,这些操作符具有固定的符号表示(例如 + 和 * )和固定的优先级,通过操作符重载可以将操作符的行为映射到指定的方...

    叶应是叶
  • 重拾Kotlin(21)-委托

    委托模式是一种基本的设计模式,该模式下有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。Kotlin 原生支持委托模式,可以零样板代码来...

    叶应是叶
  • 重拾Kotlin(20)-对象表达式与对象声明

    在 Kotlin 的世界中,可以通过对象声明这一功能来实现 Java 中的单例模式,将类声明与该类的单一实例声明结合到一起

    叶应是叶
  • 使用Kotlin+SpringBoot进行web开发

    Kotlin已经发布1.1.0版本了,玩过后已经被其先进的语法深深迷恋。这里不再陈述Kotlin的强大,只说明一下如何与SpringBoot进行集成开发。

    飞奔去旅行
  • 一步步封装实现自己的网络请求框架 2.0

    在今年的二月份,我在发布本 Repo:基于 ViewModel + LiveData + Retrofit + RxJava 封装的网络请求框架 的同时,也写了...

    叶应是叶
  • Kotlin 泛型之类型擦除

    Kotlin 基于 Java 6,因此 Kotlin 天生支持泛型。但是 Kotlin 的泛型有自己的特点。

    fengzhizi715
  • 你还在把Java当成Android官方开发语言吗?Kotlin了解一下!

    Kotlin 能够扩展一个类的新功能而无需继承该类,或者对任意的类使用像“装饰者(Decorator)”这样的设计模式。这些都是通过叫做“扩展(extensio...

    Android技术干货分享
  • [译] Kotlin 标准方法备忘

    前段时间我在推特上谈到了 Kotlin 标准方法备忘的新内容,我发现它们比传统的方法更好。它并不关注每个方法的工作原理,而是根据开发人员想要实现的目标来提供指导...

    Android 开发者
  • 重拾Kotlin(17)-异常

    和 Java 不同的是,Kotlin 中 throw 结构是一个表达式,可以作为另一个表达式的一部分来使用

    叶应是叶
  • 重拾Kotlin(19)-中缀调用、解构声明

    使用 “to” 来声明 map 的 key 与 value 之间的对应关系,这种形式的函数调用被称为中缀调用

    叶应是叶

扫码关注云+社区

领取腾讯云代金券