四、标准函数和静态方法(Kotlin)

本文介绍了Kotlin中with, run和apply函数的使用,它们都用于简化对象方法调用,但各有特点。with提供对象上下文并返回Lambda最后一行结果,run和apply在对象上调用,run不返回对象,apply返回原对象。此外,还探讨了Kotlin如何通过单例类和companion object实现静态方法的效果,并讨论了静态方法的替代方案。
摘要由CSDN通过智能技术生成

一、标准函数

标准函数:定义在 Standard.kt 文件中的函数。

1. with函数

需要传入两个参数。第一个参数是任意类型的对象;第二个参数是一个Lambda表达式

with函数会在Lambda表达式中提供 第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值。

作用:可以在连续多次调用同一个对象的方法时让代码变得更加精简。

 

实例:


fun main(){
    
    val list = listOf("Apple","Banana","Orange","Pear","Grape")

    val builder = StringBuilder()
    builder.append("Start eating fruit.\n")
    for(fruit in list){
        builder.append(fruit).append("\n")
    }
    builder.append("Ate all fruits.\n")

    val res = builder.toString()
    println(res)

}

使用 with函数进行精简:

fun main(){
    
    val list = listOf("Apple","Banana","Orange","Pear","Grape")

    val res = with(StringBuilder()){
        append("Start eating fruits.\n")
        for(fruit in list){
            append(fruit).append("\n")
        }
        append("Ate all fruits.\n")
    }

    
	println(res)
}

2. run函数

用法和with函数基本一样,不同点在于,run函数通常不能直接调用,需要在某个对象的基础上调用;其次run函数只能接受一个Lambda参数。

fun main(){
    
    val list = listOf("Apple","Banana","Orange","Pear","Grape")

    val res = StringBuilder().run{
        append("Start eating fruits.\n")
        for(fruit in list){
            append(fruit).append("\n")
        }
        append("Ate all fruits.\n")
    }
    
	println(res)
}

3. apply函数

apply函数只能返回调用对象本身。其它用法与run函数一致。

fun main(){
    
    val list = listOf("Apple","Banana","Orange","Pear","Grape")

    val res = StringBuilder().apply{
        append("Start eating fruits.\n")
        for(fruit in list){
            append(fruit).append("\n")
        }
        append("Ate all fruits.\n")
    }
    
	println(res)
}

 

二、静态方法

静态方法就是那些不需要创建实例就能调用的方法。

在Kotlin中创建静态方法并不像Java中加个static关键字那样简单。在Kotlin中弱化了静态方法的使用,取而代之的是使用单例类来实现类似的功能。

使用单例类的形式创建Util工具类:

object Util{
    
    fun doAction(){
        println("Do Action.")
    }
}

fun main(){
    
    Util.doAction()
}

虽然Util不是静态方法,但是仍然可以使用 Util.doAction() 的方式来调用。

使用单例类的写法会将整个类中所有方法全部变成类似于静态方法的调用方式。如果只是想让类中的某一个方法变成类似于静态方法的调用方式则需要使用 companion object关键字来实现。

class Util{
    
    fun doAction1{
        
            println("Do Action 1.")
    }
    
    
    companion object{
        
        fun doAction2{
            
            println("Do Action 2.")
        }
    }
    
    
}

 

 如果我们在 单例类companion object 中的方法加上 @JvmStatic ,Kotlin编译器就会将该方法编译成真正的静态类。

 

注意:Kotlin编译器会将顶层方法全部被编译成静态方法。所谓顶层方法就是没有定义在任何类中的方法,比如 main方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值