首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重构语句时,智能强制转换不起作用。如何解决?

重构语句时,智能强制转换不起作用。如何解决?
EN

Stack Overflow用户
提问于 2018-05-16 11:28:43
回答 1查看 31关注 0票数 1

下面我有一些简单的东西(我使用when而不是if,因为我简化了一些使用when的代码)

代码语言:javascript
复制
fun simplePresent(presentable: Presentable?) {
    when {
        presentable != null -> execute(presentable)
        else -> skip()
    }
}

fun execute(presentable: Presentable) { // Do something }

一切都很好。但是当我将签出代码重构为函数时

代码语言:javascript
复制
fun simplePresent(presentable: Presentable?) {
    when {
        hasPresentable(presentable) -> execute(presentable)
        else -> skip()
    }
}

fun execute(presentable: Presentable) { // Do something }
fun hasPresentable(presentable: Presentable?) = presentable != null

传递给execute函数的值的智能强制转换为非null失败,从而导致报告required Presentable found Presentable?的编译时错误

我如何防止这个错误,同时我仍然保留我的重构代码?

EN

回答 1

Stack Overflow用户

发布于 2018-05-16 11:56:27

函数应该是相互独立的。如果presentable在类型级别不为空,则没有强制hasPresentable返回true的约束。

因此,如果没有Kotlin团队决定增强类型系统,这几乎是不可能的。

为什么不使用像presentable?.execute() ?: skip()这样的东西呢?

如果你想在hasPresentable中做更多的检查,你可以这样做:

代码语言:javascript
复制
fun checkPresentable(presentable: Presentable?): Presentable? =
  presentable?.takeIf { do your check here }

fun simplePresent(presentable: Presentable?) =
  checkPresentable(presentable)?.execute() ?: skip()

fun Presentable.execute() {  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50362060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档