如果对象不为空,则创建 运行 函数的扩展
Create extension that run a function if object is not null
我可以使用 kotlin 扩展函数来做这样的事情吗:
// extension
inline fun <T : Any> T?.runIfNotNull(function: (T) -> Unit) {
this?.let { function(it) }
}
// some function
fun doSomething(int: Int){
// do something
}
// doSomething will be called with maybeNullInt as argument,
// when maybeNullInt is not null
maybeNullInt?.runIfNotNull { doSomething }
基本上,我想要的是替换
maybeNullInt?.let{ doSomething(it) }
与
maybeNullInt?.runIfNotNull { doSomething }
是的,你可以。
要么使用函数引用
maybeNullInt?.runIfNotNull(::doSomething)
或在 lambda 中传递参数
maybeNullInt?.runIfNotNull { doSomething(it) }
您可以使用 Kotlin 标准库中的 let
函数,而不是创建您自己的扩展函数:
maybeNullInt?.let(::doSomething)
::
- 在 Kotlin 中,我们使用此运算符按名称引用函数。
basically I want to do this maybeNullInt?.runIfNotNull { doSomething }
您已经可以使用 ?.let
(或 ?.run
):
maybeNullInt?.let(::doSomething)
您不能写成 { doSomething }
,因为它的意思完全不同。有关 ::
语法的说明,请参阅 https://kotlinlang.org/docs/reference/reflection.html#callable-references。
如果你定义 runIfNotNull
你实际上可以在没有 ?
的情况下使用它:
maybeNullInt.runIfNotNull(::doSomething)
(如果 maybeNullInt
为 null
,则不执行任何操作)。
我可以使用 kotlin 扩展函数来做这样的事情吗:
// extension
inline fun <T : Any> T?.runIfNotNull(function: (T) -> Unit) {
this?.let { function(it) }
}
// some function
fun doSomething(int: Int){
// do something
}
// doSomething will be called with maybeNullInt as argument,
// when maybeNullInt is not null
maybeNullInt?.runIfNotNull { doSomething }
基本上,我想要的是替换
maybeNullInt?.let{ doSomething(it) }
与
maybeNullInt?.runIfNotNull { doSomething }
是的,你可以。
要么使用函数引用
maybeNullInt?.runIfNotNull(::doSomething)
或在 lambda 中传递参数
maybeNullInt?.runIfNotNull { doSomething(it) }
您可以使用 Kotlin 标准库中的 let
函数,而不是创建您自己的扩展函数:
maybeNullInt?.let(::doSomething)
::
- 在 Kotlin 中,我们使用此运算符按名称引用函数。
basically I want to do this maybeNullInt?.runIfNotNull { doSomething }
您已经可以使用 ?.let
(或 ?.run
):
maybeNullInt?.let(::doSomething)
您不能写成 { doSomething }
,因为它的意思完全不同。有关 ::
语法的说明,请参阅 https://kotlinlang.org/docs/reference/reflection.html#callable-references。
如果你定义 runIfNotNull
你实际上可以在没有 ?
的情况下使用它:
maybeNullInt.runIfNotNull(::doSomething)
(如果 maybeNullInt
为 null
,则不执行任何操作)。