网站首页 > 技术文章 正文
在Standart.kt中定义
@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block()
return this
}
调用apply函数的对象类型是泛型,说明任何对象都可以调用该方法。
返回对象是调用apply函数的对象本身, 在代码块中可以使用this访问其调用对象。
理解T.()->Unit
T.()->Unit 的函数体中可以直接使用T代表的对象,使用关键字this。相当于是给类T定义了一个扩展函数,该函数没有形参,没有返回值。也是因为T.()为T的扩展函数,所以可以在函数体里直接访问T对象的属性或者成员函数。
示例:
fun main(){
var info = "HELLO,World"
var result: String = info.apply {
println("之前结果是:$this")
var lower = this.toLowerCase()
println("之后结果是:$lower")
}
// 打印的值仍然是info最初的信息
println("调用apply函数之后的值是:$result")
}
/*
输出
之前结果是:HELLO,World
之后结果是:hello,world
调用apply函数之后的值是:HELLO,World*/
猜你喜欢
- 2024-11-16 3.1 Python高级编程-函数式编程工具
- 2024-11-16 面向对象编程的一些思考(面向对象编程的理解)
- 2024-11-16 知识总结-Java8 Stream函数式编程
- 2024-11-16 bind、call、apply 区别?如何实现一个bind?
- 2024-11-16 Javascript基础重拾笔记之手写apply、call
- 2024-11-16 java 8新特性 常用内置函数式接口
- 2024-11-16 7、JavaScript 内置的常用对象有哪些?该对象常用的方法(必会)
- 2024-11-16 Java中“::”是什么含义(java中+是什么)
- 2024-11-16 Java 8 中的 Function:让代码从繁琐到简洁的魔法工具
- 2024-11-16 13万字详细分析JDK中Stream的实现原理(中)
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-