记一次安卓(Kotlin)-kotlin方法和Lambda表达式_06

151 阅读3分钟
方法声明
  • 普通类的方法
  • 静态类的方法
  • companion object 伴生类的方法

方法的结构:

image.png

普通类的方法:


//普通类的方法,class就是普通类
class Person {
    fun test() {
        println("成员方法")
    }
}

//需要先构建出对象,才能访问成员方法
>>> Person().test()

静态类的方法:


//静态类里面的方法就是静态方法
//一般实现一个工具类,可以借助关键字object来创建一个静态类
//不需要构建实例对象,可以通过类名,直接访问静态方法
object NumUtil {
    fun double(num: Int): Int {
        return num * 2
    }
}

>>>NumUtil.double(1)


companion object伴生类的方法:

Kotlin中并没有stagic关键字,不过我们可以借助companion object来实现静态类方法的目的.


//普通类
class Person {
    fun test() {
        println("成员方法")
    }
    //当想在普通类里定义一个静态方法的话用伴生类
    companion object {
        fun test2("成员方法test2") {
        
        }
    }
    
}

>>>Person().test()
>>>Person.test2()

方法参数
  • 默认参数
  • 具名参数
  • 可变数量的参数

默认参数:


//省略参数的时候使用的默认值.与Java相比,这可以减少重载数量
fun read(offset: Int = 0) {
    ...
}

具名参数:


//如果一个默认参数在一个无默认值的参数之前,那么无默认值的参数,只能通过使用具名参数调用该方法来使用
fun read(offset: Int = 0, start: Int) {
    ...
}

>>>read(start = 1) //仅仅只给start传递值,使用默认值offset = 0

//如果最后一个参数是方法,那么它既可以作为具名参数在括号内传入,也可以在括号外传入.
//Unit是没有返回值的意思
fun read(offset: Int = 0, start: Int, action: () -> Unit) {
    ....
}
>>> read(start=1) {println("hello")}
>>> read(offset=1, start=1, action= {println("hello")})
 

可变参数:


//方法的参数(通常是最后一个)可以用vararg修饰符标记
fun append(vararg str: Char): String {
    val result = StringBuffer()
    for (char in str) {
        result.append(char)
    }
    return result.toString()
}
>>>append('1', '2', '3')

当我们调用vararg方法时,除了可以一个接一个的传入参数以外,如果已经有一个数组并希望将其内容传给该方法,使用伸展(spread)操作符(在数组前面加*):


val world = charArrayOf('w', 'o', 'r', 'l', 'd')
val result = append('a', 'b', *world)

可变参数是有要求的:1.只有一个参数可以标注为vararg;2.如果vararg参数不是最后一个参数,可以使用具名参数语法,给后面的参数传递值

Lambda表达式

Java8的时候开始支持Lambda表达式,Lambda表达式可以理解为一种语法糖,Kotlin一经开源就支持Lambda表达式.

如果是有返回值的方法,花括号中最后一行的值就是方法的返回值

Lambda隐形参数it

  • it并不是Kotlin中的关键字(保留字).
  • it是在当一个高阶方法中Lambda表达式的参数只是一个的时候,可以使用it来使用此参数
  • it可表示为单个参数的隐式名称,是Kotlin语言的约定

如何使用下划线_ 在使用Lambda表达式的时候,可以用下划线_表示为使用的参数,表示不处理这个参数.