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中,需要类名.方法调用