如果我有类似的话:
fun showProgressView() = ultraRecyclerView?.showProgressBar()
它说它返回Unit?
而不是Unit
(已编辑)
- - - - - - - - 编辑
一种方法可以
fun showProgressView() = ultraRecyclerView?.showProgressBar() ?: Unit
但它看起来不适合我。
另一种方式:
fun showProgressView() { ultraRecyclerView?.showProgressBar() }
但是我找不到安卓工作室维护这种格式的方法。
答案 0 :(得分:6)
如果使用函数的短表达式,则表达式的推断结果类型确定函数返回类型。如果这是来自Java的平台类型,它可以是可空的。如果它是Kotlin类型,那么它将知道正确的可空性。
但是,因为你使用安全操作符?.
,你肯定会说它可以为空。如果结果为null
或Unit
,则会提供推断结果类型Unit?
这很奇怪,但正是你所说的。因此,要么使用带有{ .. }
的普通函数体,要么在可能的情况下为函数提供显式返回类型。
fun showProgressView(): Unit { ultraRecyclerView?.showProgressBar() }
您还可以通过在Unit?
上创建扩展功能来删除可空性:
fun Unit?.void() = Unit
每当您想要修复返回类型时使用它:
fun showProgressView() = ultraRecyclerView?.showProgressBar().void()
答案 1 :(得分:3)
IntelliJ IDEA / Android Studio似乎没有设置将块体功能的样式保留在一行上。即便如此,您也可以使用run
来解决这个问题:
fun showProgressView() = run<Unit> { ultraRecyclerView?.showProgressBar() }
通常,您不需要向run
添加显式类型参数,但在这种情况下,提供它们会为您提供所需的方法签名(返回类型为Unit
而不是Unit?
)。< / p>
注意:此答案改编自comment我提交给why assignments are not statements。