相关文章推荐
威武的罐头  ·  Manage Python ...·  1 年前    · 
无邪的灌汤包  ·  mysql delete ...·  1 年前    · 
飞奔的丝瓜  ·  GitKraken 6.5.1 ...·  1 年前    · 
有胆有识的牛肉面  ·  Spark ...·  1 年前    · 

Kotlin的标准函数指的是Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数。

with函数

接收 两个参数 :第一个参数可以是一个任意类型的对象,第二个参数是一个Lambda表达式。

with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的 最后一行代码作为返回值返回

它可以在连续调用同一个对象的多个方法时让代码变得更加精简。

比如有一个水果列表,现在我们想吃完所有水果,并将结果打印出来,就可以这样写:

上述代码,连续调用了很多次builder对象的方法,这个时候就可以考虑使用with函数来让代码变得更加精简:

首先我们给with函数的第一个参数传入了一个StringBuilder对象,那么接下来整个Lambda表达式的上下文就会是这个StringBuilder对象。

run函数

用法和使用场景其实和with函数是非常类似的。

首先run函数通常不会直接调用,而是要在 某个对象的基础上调用

其次run函数只接收一个Lambda参数,并且会在Lambda表达式中提供调用对象的上下文。

其他方面和with函数是一样的。

run函数来修改一下吃水果的这段代码:

apply函数

和run函数也是极其类似的,都要在某个对象上调用,并且只接收一个Lambda参数,也会在Lambda表达式中提供调用对象的上下文, 但是apply函数无法指定返回值,而是会自动返回调用对象本身

用apply函数来修改一下吃水果的这段代码,如下所示:

这里的result实际上是一个StringBuilder对象。

定义静态方法

静态方法在某些编程语言里面又叫作类方法,指的就是那种不需要创建实例就能调用的方法。

在Java中定义一个静态方法非常简单,只需要在方法上声明一个static关键字就可以了,如下所示:

然后Kotlin弱化了静态方法,像工具类这种功能,更推荐使用 单例类

虽然它不是静态方法。但是仍然可以使用 Util.doAction() 的方式来调用。

不过,使用单例类的写法会将整个类中的 所有方法全部变成类似于静态方法 的调用方式;

而如果我们只是希望 让类中的某一个方法变成静态方法 的调用方式就要用到 companion object 了:

doAction1()方法是一定要先 创建Util类的实例 才能调用的,而doAction2()方法可以直接使用 Util.doAction2() 的方式调用。

不过doAction2()方法并不是静态方法,companion object这个关键字实际上会在Util类的内部创建一个伴生类,而doAction2()方法就是定义在这个伴生类里面的实例方法。只是Kotlin会保证Util类始终只会存在一个伴生类对象,因此调用Util.doAction2()方法实际上就是调用了Util类中伴生对象的doAction2()方法。

这些语法特性基本可以满足我们平时的开发需求了。

真正的静态方法

Kotlin提供了两种实现方式:注解和顶层方法。

给单例类或companion object中的方法加上@JvmStatic注解,那么Kotlin编译器就会将这些方法编译成真正的静态方法。

注意,@JvmStatic注解只能加在单例类或companion object中的方法上。

由于doAction2()方法已经成为了真正的静态方法,那么现在不管是在Kotlin中还是在Java中,都可以使用Util.doAction2()的写法来调用了。

顶层方法指的是那些没有定义在任何类中的方法。只要定义了一个顶层方法,那么它就一定是静态方法。

定义一个顶层文件,先新建一个Kotlin File。这个文件中定义的任何方法都会是顶层方法。

调用方法:

在kotlin中,所有的顶层方法都可以在 任何位置 被直接调用,不用管包名路径,也不用创建实例,直接 键入doSomething() 即可。

在Java代码中,是找不到doSomething()这个方法的,因为Java中没有顶层方法这个概念。

比如刚才创建的Kotlin文件名叫作Helper.kt,于是Kotlin编译器会自动创建一个叫作 HelperKt的Java类 ,doSomething()方法就是以静态方法的形式定义在HelperKt类里面的,因此在Java中 使用HelperKt.doSomething() 的写法来调用就可以了。

以上,除了@JvmStatic注解不太常用之外,其他像单例类、companion object、顶层方法都是Kotlin中十分常用的技巧。