Kotlin标准函数和静态方法

标准函数

with

第一个参数是一个类型或者对象,第二个参数是lambda表达式。其中第一个参数为第二个参数提供上下文,返回值是最后一行。案例代码:

Kotlin 复制代码
fun main() {
    val list = mutableListOf<String>()
    var ret = with(list) {
        add("1")
        remove("1")
        toString()
    }
    println(ret)
}

run

只有一个参数,是lambda表达式。返回值是最后一行,且它需要一个对象去调用:

Kotlin 复制代码
fun main() {
    var ret = mutableListOf<String>().run {
        add("1")
        add("2")
        remove("1")
        toString()
    }
    println(ret)
}

apply

和run类似,但是无法指定返回值。默认返回的是调用对象本身:

Kotlin 复制代码
fun main() {
    var ret = mutableListOf<String>().apply {
        add("1")
        add("2")
        remove("1")
    }
    println(ret.toString())
}

静态方法

单例类/companion object

Kotlin本身没有static关键字来支持静态函数,但是它本身有单例类的特性可以支持类似静态函数的功能。但是若想只把某个类的某个函数声明为静态函数的话,就需要加上companion object:

Kotlin 复制代码
class A{
    fun bb(){
        println("bb")
    }
    companion object{
        fun aa(){
            println("aa")
        }
    }
}
fun test(){
    A.aa()
}
fun main() {
    test()
}

注解(@JvmStatic)

Kotlin 复制代码
class A{
    fun bb(){
        println("bb")
    }
    companion object{
        @JvmStatic
        fun aa(){
            println("aa")
        }
    }
}
fun test(){
    A.aa()
}
fun main() {
    test()
}

注解只能用在单例类和companion object下。

相关推荐
Elias不吃糖3 小时前
整合了c++里面常用的STL及其常用API
开发语言·c++·学习·stl
E***q5393 小时前
后端服务限流实现,Spring Cloud Alibaba Sentinel
java·开发语言·sentinel
Code Warrior3 小时前
【MySQL数据库】数据类型
android·数据库·mysql
橘子海全栈攻城狮3 小时前
【源码+文档+调试讲解】实验室耗材管理系统springboot 094
java·开发语言·spring boot·后端·spring
范纹杉想快点毕业3 小时前
《嵌入式硬件从入门到精通:电源 / 模电 / 数电 / 通信核心全解析》
java·开发语言·数据库·单片机·嵌入式硬件
Ryan ZX3 小时前
【Go语言基础】Go语言开发环境搭建
开发语言·后端·golang
x***J3484 小时前
后端服务限流算法,计数器与滑动窗口
java·开发语言
二川bro4 小时前
第51节:Three.js源码解析 - 核心架构设计
开发语言·javascript·ecmascript
-大头.4 小时前
响应式编程实战:WebFlux与RSocket深度解析
java·开发语言
异步的告白4 小时前
C语言-数据结构-2-单链表程序-增删改查
c语言·开发语言·数据结构