前言
之前写过一篇Kotlin语法学习(上)https://blog.csdn.net/weixin_43615488/article/details/105952090,讲述的是kotlin的基础语法,这篇主要将kotlin的其他一些特性及用法
1. 标准函数with、run和apply
(1)with函数接收两个参数,第一个参数可以是任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式的最后一行代码作为返回值返回
fun main(){
val list = listOf("Apple","Banana","Pear","Orange")
val result=with(StringBuilder()){
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all fruits.")
toString()
}
println(result)
}
(2)run不能单独使用,需要某个对象调用run,run函数只接收一个Lambda参数,并会在Lambda表达式中提供调用对象的上下文,并使用Lambda表达式的最后一行代码作为返回值返回,这点和with函数一样
un main(){
val list = listOf("Apple","Banana","Pear","Orange")
val result=StringBuilder().run{
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all fruits.")
toString()
}
println(result)
}
(3)apply函数和run类似,只是apply无法指定返回值,会自动返回对象本身
fun main(){
val list = listOf("Apple","Banana","Pear","Orange")
val result=StringBuilder().apply{
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all fruits.")
}
println(result.toString())
}
2. 定义静态方法
(1)使用单例类,单例类中的方法即类似静态方法
object Util{
fun doAction(){
}
}
(2)用 companion object块
class Util{
companion object{
fun doAction(){
}
}
}
(3)顶层方法:顶层方法指那些没有定义在任何类中的方法,它们即是静态方法
3. 延迟初始化
private lateinit var adapter: AbstractThreadedSyncAdapter
延迟初始化使用的是lateinit关键字,它可以告诉Kotlin编译器,我会在晚些时候对这个变量进行初始化,所以就不用在一开始的时候将它赋值为null了,也避免使用的时候用?.去进行判空处理
::adapter.isInitialized可用于判断adapter变量是否已经初始化
4. 扩展函数
下面是实现String类的扩展函数lettersCount()
fun String.lettersCount():Int{
var count=0
for(char in this){
if(char.isLetter()){
count++
}
}
return count
}
除此之外,kotlin还有许多高级语法,像“密封类sealed class”、“运算符重载”、“高阶函数”、“泛型”、“委托”、“协程”等