1、标准函数with、run和apply
let : 函数,配合?.进行辅助判空处理 with : 连续调用同一个对象的多个方法,让代码变得更加简洁
val list = listOfNotNull("apple","banana","orange","li") val stringBuilder = StringBuilder() stringBuilder.append("start eat fruit.\n") for (i in list){ stringBuilder.append(i).append(".\n") } stringBuilder.append("start eat fruit end.\n") val result = stringBuilder.toString() println(result) println("------------------------with----------------------------") val results = with(StringBuilder()){ append("start eat fruit.\n") for (i in list){ append(i).append(".\n") } append("start eat fruit end.\n") toString() } println(results)
run : 和with用法场景非常类似
val result1 = StringBuffer().run { append("start eat fruit.\n") for (i in list){ append(i).append(".\n") } append("start eat fruit end.\n") toString() }
apply:和run类似,在对象上调用,只能有一个Lambda表达式,也会在Lambda表达式中提供调用对象的上下文,无法指定返回值
val result2 = StringBuilder().apply { append("start eat fruit.\n") for (i in list){ append(i).append(".\n") } append("start eat fruit end.\n") } println(result2.toString())
Android中跳转使用
companion object{ fun gotoActivity(context: Context , data : String){ val intent = Intent(context,SecondActivity :: class.java).apply { putExtra("data1",data) putExtra("data2",data) putExtra("data3",data) putExtra("data4",data) putExtra("data5",data) } context.startActivity(intent) } }
2、静态方法
静态方法又叫类方法,是那种不用创建实例就能调用的方法,在java中,用static修饰的方法就是静态方法,在Kotlin中,如果是定义工具类,就建议使用单例类来实现相关方法
object Utils { fun doAction(){ println("静态方法") } } Utils.doAction()
因为使用单例类,会使所有的方法变成静态方法,如果一个类中只需要一个方法变成单例模式,需要在这个方法外面包companion object这个函数,就实现单例类了
companion object{ fun doAction(){ println("静态方法") } }
companion object这个关键字会在类中内部创建一个伴生类,而doAction就是定义在伴生类里面的实例方法。所以,kotlin中没有直接定义静态方法的关键字,但是提供了一些语法特性来支持类似静态方法的调用的写法
3、静态方法实现
两种方式;注解和顶层方法 1)注解 上述的方法,都无法在java中以静态方法方式调用,如果在 companion object中的静态方法上加上@JvmStatic注解,kotlin编译器就能编译成真正的静态方法
companion object{ @JvmStatic fun doAction(){ println("静态方法") } }
2)顶层方法 直接创建File类,在里面定义方法 New--Kotlin--输入类名--选择File--OK
fun doAction(){ println("静态方法") } fun doAction1(){ println("静态方法") }
在Kotlin方法中,直接可以调用,在java中,需要类名.方法调用