Kotlin中(Duration) -> String?这一语法代表什么含义?
Kotlin 函数类型语法说明
你遇到的(Duration) -> String?是Kotlin标准的函数类型声明,具体含义拆解如下:
- 括号内的
Duration表示该类型的实例是一个函数,调用时必须传入1个Duration类型的入参 ->是函数类型的固定分隔符,左侧为参数类型列表,右侧为返回值类型- 末尾的
String?表示该函数的返回值为可空字符串类型,既可以返回正常的String实例,也可以返回null
这个变量t本质是存储函数的容器,和存储整型、字符串的普通变量没有本质区别,只是它存储的内容支持调用。你看到的val str = t(<Insert Duration here>)就是调用该变量中存储的函数:传入一个Duration实例,将得到的可空字符串返回值赋值给str,调用写法和普通函数完全一致。
举个实际赋值的例子方便理解:
// 1. 赋值为lambda表达式 private val t: (Duration) -> String? = { duration -> if (duration.inWholeSeconds > 0) "共耗时${duration.inWholeSeconds}秒" else null } // 2. 赋值为已有普通函数的引用 fun formatDuration(d: Duration): String? = d.takeIf { it.isPositive }?.toString() private val t = ::formatDuration // 编译器会自动推导出t的类型为(Duration) -> String?
这种设计通常用来做逻辑解耦,类内部不需要关心Duration格式化的具体实现,只需要调用t拿到结果即可,具体的格式化逻辑可以从类外部注入,也可以在不同业务场景下替换为不同的实现。
内容的提问来源于stack exchange,提问作者mooglin
相关产品推荐
相关产品推荐

