kotlin - 如何在 Kotlins "-> empty"中处理 "when"

标签 kotlin

让我们假设以下 when 语句:

when(a)
{
   x    -> doNothing()
   y    -> doSomething()
   else -> doSomethingElse()
}

现在我正在寻找消除样板功能“doNothing()”,例如:
x ->        //doesn't compile
x -> null   //Android Studio warning: Expression is unused
x -> {}     //does work, but my corporate codestyle places each '{‘ in a new line, looking terrible
            //also, what is this actually doing?

有什么更好的想法吗?
我不能只是消除x ->完全,因为这会导致 else -> doSthElse()
编辑:在写完这个问题之后,我想出了一个可能的答案 x -> Unit .那有什么缺点吗?

最佳答案

Kotlin 有两种现有的可能性来在 when 语句中表达“什么都不做”的结构。 Unit 或一对空的大括号。一个空块将不执行任何操作。
在这方面没有其他计划(请参阅 here )。

回答您关于“此外,这实际上在做什么?”的问题。对于空块,查看字节码并将其翻译成 Java 有助于:

val x = 33
when(x)
{
    1 -> {}
    2 -> Int
    3 -> Unit
    else -> Double
}

翻译成
int x = 33;
switch(x) {
  case 1:
  case 3:
     break;
  case 2:
     IntCompanionObject var10000 = IntCompanionObject.INSTANCE;
     break;
  default:
     DoubleCompanionObject var1 = DoubleCompanionObject.INSTANCE;
}

关于kotlin - 如何在 Kotlins "-> empty"中处理 "when",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60755131/

相关文章:

kotlin - 为什么注释类不能推断类型参数?

android - 使用实时数据、改造、mvvm 和存储库模式制作通用网络适配器

安卓最高自定义通知的大小

kotlin - linkedSetOf 和 hashSetOf 有什么区别?

java - 找不到构建工具修订版 29.0.2 - Android Studio

kotlin - 使用Kotlin的FastUtil IntList时避免过时警告

android - Kotlin 扩展函数

android - 从 Firebase 数据库快照解析 bool 值

java - 逆变类型上的 Kotlin 星投影

android - 验证硬编码密码