如何定义一个调用可空变量函数的oneline函数
如果我有这样的东西:
fun showProgressView() = ultraRecyclerView?.showProgressBar()
它说,它返回Unit?
而不是Unit
(编辑)
– – -编辑 – – –
一种方法可以是fun showProgressView() = ultraRecyclerView?.showProgressBar() ?: Unit
但它看起来不正确的我。
另一种方法: fun showProgressView() { ultraRecyclerView?.showProgressBar() }
但我无法找到一种方式,android studio保持这种格式。
如果使用函数的短表达式形式,则表达式的推断结果类型将确定函数的返回类型。 如果这是来自Java的平台类型,则可能是空的。 如果是Kotlin类型,那么它将知道正确的可空性。
但是既然你使用了安全的操作符?.
你肯定是说可能是空的。 如果结果是null
或Unit
那么给出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?
)。
注意:这个答案是根据我给的意见改编的, 为什么作业不是陈述 。
- Android + Kotlin – 项目不再建设
- 无法在Eclipse中运行Kotlin应用程序
- Mockito / Powermock不像Kotlin预期的那样工作
- Android – Kotlin:异步乐趣中的返回值
- 活动中的碎片奇怪的行为
- 当我退出应用程序时,为什么在Android应用程序中使用Kotlin / rxJava编写android.os.TransactionTooLargeException? (的OnExit /的onPause)?
- 如何检查kotlin中的“instanceof”类?
- 使用yeoman生成器Gradle + Kotlin无法生成新项目
- 如何模仿或实现Kotlin数据类的IS-A关系