二、Kotlin标准函数和静态函数

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----------------------------")     //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编译器就能编译成真正的静态方法 
	// @JvmStatic 只能加载单例类和companion object的方法上,如果加在普通方法上,会报错     companion object{         @JvmStatic         fun doAction(){             println("静态方法")         }     } 
2)顶层方法 	直接创建File类,在里面定义方法 	New--Kotlin--输入类名--选择File--OK 
 fun doAction(){     println("静态方法") }  fun doAction1(){     println("静态方法") } 
在Kotlin方法中,直接可以调用,在java中,需要类名.方法调用