该博客是《第一行代码》第三版第3章关于Kotlin部分的笔记

一、标准函数with、run和apply

(一)with

  1. with函数接收2个参数:第一个参数可以是任意的对象,第二个参数是一个Lambda表达式。
  2. with函数会在Lambda表达式中提供第一个对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回。示例代码如下:
val result = with(obj) { 	// 这里是obj的上下文 	"value" //with函数的返回值 } 
  1. with函数的作用:在连续调用同一个对象的多个方法时,with函数可以让代码变得更加精简,如:
val list = listOf("apple",  "banana",  "orange", "pear") val result = with(StringBuilder()) { 	append("start eating fruits.\n") 	for(fruit in list) { 		append(fruit).append("\n") 	} 	append("Ate all fruits.") 	toString() } println(result) 

(二)run

run函数的用法和使用场景其实和with函数是非常类似的,只是稍微做了一些语法改动而已。

  1. run函数不能直接调用,而是一定要调用某个对象的run函数才行
  2. run函数只接收一个Lambda参数,并且会在Lambda表达式中提供调用对象的上下文
  3. 其他方面和with函数一样

示例代码如下:

val result = obj.run { 	// 这里是obj的上下文 	"value" // run函数的返回值 } 

(三)apply

apply函数和run函数极其类似,但apply函数无法指定返回值,而是会自动返回调用对象本身。

val result = obj.apply { 	// 这里是obj的上下文 } // result == obj 

二、定义静态方法

在kotlin中编写工具类,建议使用单例类

object Util { 	fun doAction() {} } 

在kotlin中想要定义静态方法,应该使用companion object

class Util { 	fun doAction1() {} 	companion object { 		fun doAction2() {} 	} } 

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

@JvmStatic

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

顶层方法

顶层方法指的是那些没有定义在任何类中的方法,Kotlin编译器会将所有的顶层方法编译成静态方法。

  • 在Kotlin中,直接调用这个顶层方法即可
  • 在Java中,会生成一个“文件名Kt的类”,如,Helper.kt中有一个doSomething方法,可以调用HelperKt.doSomething()