Kotlin使用技巧(1)-->标准函数、静态方法、常量

一、标准函数with、run、apply

标准函数是指在Standard.kt文件中定义的函数,任何的Kotlin代码都可以自由的调用。
我们之前在[Kotlin基础(8)-->空指针检查(https://www.jianshu.com/p/3c1b53b239bf)已经学习了let标准函数,主要作用就是配合?.操作符来进行辅助判空处理,这里就不再赘述了。

1.with函数

定义:with函数接收两个参数,第一个可以是任意类型的对象,第二个是lambda表达式。with函数会在lambda表达式中提供第一个参数的上下文,并使用lambda表达式中的最后一行代码最为返回值返回
作用:可以在连续调用同一个对象的多个方法时让代码变得更加精简
例子
原始代码:

val list = listOf("Apple", "banana", "orange")
var builder = StringBuilder()
builder.append("start eat \n")
for (i in list) {
    builder.append("$i,\n")
}
builder.append("finish")
val result = builder.toString()
print(result)

使用with函数

val list = listOf("Apple", "banana", "orange")
val result= with(StringBuilder()){
    append("start eat \n")
    for (i in list) {
        append("$i,\n")
    }
    append("finish")
    toString()
}
print(result)
2.run函数

run函数使用场景和with十分相似。
区别是:(1)run函数是不能直接调用的,一定要调用某个对象的run函数才行。(2)run函数只接受一个lambda参数。
例子:

val result = StringBuilder().run {
    append("start eat \n")
    for (i in list) {
        append("$i,\n")
    }
    append("finish")
    toString()
}
print(result)
3.apply函数

apply函数用法和run十分相似。
区别是:apply函数无法返回指定返回值,而是会自动返回调用对象本身
例子:

val list = listOf("Apple", "banana", "orange")
val result = StringBuilder().apply {
    append("start eat \n")
    for (i in list) {
        append("$i,\n")
    }
    append("finish")
}
print(result.toString())
3.repeat函数

repeat函数允许你传入一个数值n,之后会把lambda表达式中的内容执行n遍。例:

repeat(3){
    print("Hi")
}
//输出日志:Hi Hi Hi

二、定义静态方法

静态方法又叫做类方法,指的是那种不需要创建实例就可以调用的方法。
Java中,只要在方法前声明static关键字就是静态方法。
Kotlin中并没有直接定义的静态方法的关键字,但是提供了一些语法特性来支持类似于静态方法调用的写法,基本可以满足我们平时的需求了。

1.companion object

这个关键字实际上会在Util类的内部创建一个伴生类,而action2()方法就是定义在这个伴生类的实例方法。
Kotlin会保证Util类始终只会存在一个伴生类对象。调用Util.action2()方法实际上是调用了Util半身类对象的action2()方法。

class Util {
    fun action1() {}

    companion object {
        fun action2() {}
    }
}

调用

fun test() {
        Util.action2()
    }
2.定义静态方法

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

1.@JvmStatic注解

@JvmStatic注解只能加在单例类或者companion object中的方法上,如果加在一个普通方法上,会提示语法错误。例:

companion object {
        @JvmStatic
        fun action2() {}
    }

如此,Kotlin编译器就会将这些方法编译成真正的静态方法。
如果不加@JvmStatic,在java中只能这样调用:Util.Companion.action2();
如果加上,就和在kotilin中一样调用了:Util.action2()

2.顶层方法

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

定义一个顶层方法,就是创建一个Kotlin文件,类型选择File。命名。
比如现在定义了一个文件名为Helper.kt,里面有doSomeThing()方法。Kotlin编译器还会自动创建一个叫HelperKt的Java类。

如何调用顶层方法呢?
在Kotlin中:直接调用doSomeThing()方法。
在Java中:HelperKt.doSomeThing()

二、常量

定义常量的关键字是const
注意:只有在单例类、companion object或顶层方法中,才可以使用const关键字