目录
with函数
这两段代码的执行结果是一模一样的,但是明显第二段代码的写法更加简洁一些,这就是with函数的作用。
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
val builder = StringBuilder()
builder.append("Start eating fruits.\n")
for (fruit in list) {
builder.append(fruit).append("\n")
}
builder.append("Ate all fruits.")
val result = builder.toString()
println(result)
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
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函数通常不会直接调用, 而是要在某个对象的基础上调用;其次run函数只接收一个Lambda参数,并且会在Lambda表 达式中提供调用对象的上下文。其他方面和with函数是一样的,包括也会使用Lambda表达式中的最后一行代码作为返回值返回。
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
val result = StringBuilder().run {
append("Start eating fruits.\n")
for (fruit in list) {
append(fruit).append("\n")
}
append("Ate all fruits.")
toString() }
println(result)
只是将调用with函数并传入StringBuilder对象改成了调用 StringBuilder对象的run方法,其他都没有任何区别,这两段代码最终的执行结果是完全相同的。
apply函数(调用对象相同、调用方法相同)
apply函数和run函数也是极其类似的,都要在某 个对象上调用,并且只接收一个Lambda参数,也会在Lambda表达式中提供调用对象的上下 文,但是apply函数无法指定返回值,而是会自动返回调用对象本身。
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
val result = StringBuilder().apply {
append("Start eating fruits.\n")
for (fruit in list) {
append(fruit).append("\n")
}
append("Ate all fruits.")
}
println(result.toString())
定义静态方法
调用方法:类名.方法名()
- 单例类
object Util {
fun doAction() {
println("do action")
} }
- 只是希望让类中的某一个方法变成静态方法companion object
companion object {
fun doAction2() {
println("do action2")
} }
顶层方法
首先需要创建一个Kotlin文件。对着任意包名右击 → New → Kotlin File/Class,在弹出的对话框中输入文件名即可。注意创建类型要选择File,在这个文件中定义的任何方法都会是顶层方法,Kotlin编译器会将所有的顶层方法全部编译成静态方法,所有的顶层方法都可以在任何位置被直接调用,不用管包名路径,也不用创建实例,直接键入方法名即可。