如何在Kotlin中实现switch-case语句

问题描述 投票:31回答:6

如何在Kotlin中实现以下Java switch语句代码的等效项?

switch (5) {
    case 1:
    // Do code
    break;
    case 2:
    // Do code
    break;
    case 3:
    // Do code
    break;
}
kotlin switch-statement
6个回答
42
投票

您可以这样:

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // Note the block
        print("x is neither 1 nor 2")
    }
}

摘自official help


8
投票

当Expression when替换类C语言的switch运算符时。以最简单的形式看起来像这样

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // Note the block
        print("x is neither 1 nor 2")
    }
}

当顺序将其参数与所有分支匹配时,直到一些满足分支条件。什么时候可以用作表达或陈述。如果将其用作表达式,则满意分支的价值变成整体的价值表达。如果将其用作语句,则各个值分支将被忽略。 (就像是否,每个分支可以是一个块,并且它的值是该块中最后一个表达式的值。)


6
投票

在Java中,[switch在Kotlin中实际上是when。但是,语法不同。

when(field){
    condition -> println("Single call");
    conditionalCall(field) -> {
        print("Blocks");
        println(" take multiple lines");
    }
    else -> {
        println("default");
    }
}

这是不同用途的示例:

// This is used in the example; this could obviously be any enum. 
enum class SomeEnum{
    A, B, C
}
fun something(x: String, y: Int, z: SomeEnum) : Int{
    when(x){
        "something" -> {
            println("You get the idea")
        }
        else -> {
            println("`else` in Kotlin`when` blocks are `default` in Java `switch` blocks")
        }
    }

    when(y){
        1 -> println("This works with pretty much anything too")
        2 -> println("When blocks don't technically need the variable either.")
    }

    when {
        x.equals("something", true) -> println("These can also be used as shorter if-statements")
        x.equals("else", true) -> println("These call `equals` by default")
    }

    println("And, like with other blocks, you can add `return` in front to make it return values when conditions are met. ")
    return when(z){
        SomeEnum.A -> 0
        SomeEnum.B -> 1
        SomeEnum.C -> 2
    }
}

其中大多数都编译为switch,但when { ... }除外,后者编译为一系列if语句。

但是对于大多数用途,如果使用when(field),它将编译为switch(field)

但是,我确实要指出,带有一堆分支的switch(5)只是浪费时间。 5始终为5。如果您使用switch,if语句或其他任何逻辑运算符,则应使用变量。我不确定代码只是一个随机示例还是实际代码。我要指出的是后者。


2
投票

开关盒在kotlin中非常灵活。>

when(x){

    2 -> println("This is 2")

    3,4,5,6,7,8 -> println("When x is any number from 3,4,5,6,7,8")

    in 9..15 -> println("When x is something from 9 to 15")

    //if you want to perform some action
    in 20..25 -> {
                 val action = "Perform some action"
                 println(action)
    }

    else -> println("When x does not belong to any of the above case")

}

1
投票

只需使用when


0
投票

这里是一个示例,可用于对任意对象使用“何时”,

© www.soinside.com 2019 - 2024. All rights reserved.