我可以使用kotlin扩展功能执行以下操作吗?
section
基本上,我要替换
// 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) }
答案 0 :(得分:4)
您可以使用Kotlin标准库中的let
函数,而不用创建自己的扩展函数:
maybeNullInt?.let(::doSomething)
::
-在Kotlin中,我们使用此运算符按名称引用函数。
答案 1 :(得分:3)
基本上我想这样做,也许是NullInt?.runIfNotNull {doSomething}
您已经可以使用?.let
(或?.run
):
maybeNullInt?.let(::doSomething)
您不能写{ doSomething }
,因为那意味着完全不同。有关::
语法的说明,请参见https://kotlinlang.org/docs/reference/reflection.html#callable-references。
如果定义runIfNotNull
,则实际上可以不使用?
来使用它:
maybeNullInt.runIfNotNull(::doSomething)
(如果maybeNullInt
为null
则不执行任何操作)。
答案 2 :(得分:1)
是的。
使用功能参考
maybeNullInt?.runIfNotNull(::doSomething)
或在lambda中传递参数
maybeNullInt?.runIfNotNull { doSomething(it) }