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

如果我有这样的东西:

fun showProgressView() = ultraRecyclerView?.showProgressBar()

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

– – -编辑 – – –

一种方法可以是fun showProgressView() = ultraRecyclerView?.showProgressBar() ?: Unit但它看起来不正确的我。

另一种方法: fun showProgressView() { ultraRecyclerView?.showProgressBar() }但我无法找到一种方式,android studio保持这种格式。

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

但是既然你使用了安全的操作符?. 你肯定是说可能是空的。 如果结果是nullUnit那么给出Unit的推断结果类型Unit?

这很奇怪,但正是你所说的。 因此,可以用{ .. }来使用一个普通的函数体,或者在可能的情况下给函数一个明确的返回类型。

 fun showProgressView(): Unit { ultraRecyclerView?.showProgressBar() } 

您也可以通过在Unit?上创建扩展功能来消除可空性Unit?

 fun Unit?.void() = Unit 

只要你想修复返回类型就使用它:

 fun showProgressView() = ultraRecyclerView?.showProgressBar().void() 

IntelliJ IDEA / Android Studio似乎没有将块体函数的样式保留在一行上的设置。 即使如此,你可以使用run来解决这个问题:

 fun showProgressView() = run<Unit> { ultraRecyclerView?.showProgressBar() } 

通常你不需要添加明确的类型参数来run但是在这种情况下,提供它们会给你想要的方法签名( Unit返回类型而不是Unit? )。

注意:这个答案是根据我给的意见改编的, 为什么作业不是陈述 。