首页 > 解决方案 > 我可以在 Runnable 中“提前返回”吗?

问题描述

在一个Runnable块内,我想做一些“保护块”,如下所示:

var condition: String? = null
Runnable {
    if (condition == null) return
    // do something
}

但编译器说“这里不允许返回”??

标签: kotlin

解决方案


有两种方法可以使这项工作:

如评论中所述,您可以使用此处讨论的“合格回报” 。这也是 IntelliJ(我猜也是 AndroidStudio)所建议的: 在此处输入图像描述

作为替代方案,您可以将 your 定义Runnable为匿名类,使您能够使用普通return语句:

 object: Runnable {
     override fun run() {
         if (condition == null) return
         // do something
     }
 }

IntelliJ 现在建议将其转换object为 lambda,这将产生与合格的完全相同的东西return

Runnable {
    if (condition == null) return@Runnable
    // do something
}

PS:没必要傻!我想你会很容易用正确的措辞找到它。很高兴知道Runnable {}这里有什么。它基本上是一个基于SAM 转换的 lambda (与具有单个抽象方法的 Java 类型一起使用)


推荐阅读