如何定义一个调用可空变量函数的oneline函数

Dan*_*ico 3 kotlin

如果我有类似的东西:

fun showProgressView() = ultraRecyclerView?.showProgressBar()

它说它返回Unit?而不是Unit(编辑)

- - -编辑 - - -

一种方法可能 fun showProgressView() = ultraRecyclerView?.showProgressBar() ?: Unit 但它看起来不适合我.

另一种方式: fun showProgressView() { ultraRecyclerView?.showProgressBar() } 但我无法找到android studio维护该格式的方法.

Jay*_*ard 6

如果使用函数的短表达式,则表达式的推断结果类型将确定函数返回类型.如果这是来自Java的平台类型,它可以是可空的.如果它是Kotlin类型,那么它将知道正确的可空性.

但是因为你使用安全操作符,?.你肯定会说它可以为空.如果结果是null或者Unit然后给出推断的结果类型Unit?

这很奇怪,但正是你所说的.因此,要么使用普通函数体,要么{ .. }在可能的情况下为函数提供显式返回类型.

fun showProgressView(): Unit { ultraRecyclerView?.showProgressBar() }
Run Code Online (Sandbox Code Playgroud)

您还可以通过在以下位置创建扩展功能来擦除可空性Unit?:

fun Unit?.void() = Unit
Run Code Online (Sandbox Code Playgroud)

每当您想要修复返回类型时使用它:

fun showProgressView() = ultraRecyclerView?.showProgressBar().void()
Run Code Online (Sandbox Code Playgroud)