如果object不为null,则创建运行函数的扩展

时间:2019-03-16 04:55:40

标签: kotlin

我可以使用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) }

3 个答案:

答案 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)

(如果maybeNullIntnull则不执行任何操作)。

答案 2 :(得分:1)

是的。

使用功能参考

maybeNullInt?.runIfNotNull(::doSomething)

或在lambda中传递参数

maybeNullInt?.runIfNotNull { doSomething(it) }