Проверьте на несколько типов внутри, когда утверждение в Kotlin - PullRequest
0 голосов
/ 04 декабря 2018

Допустим, у меня есть следующее:

sealed class Color(val name: String) {
    object Red : Color("red")
    object Green : Color("green")
    object Blue : Color("blue")
    object Pink : Color("pink")
    object Yellow : Color("yellow")
}

Можно ли проверить, является ли цвет основным, используя оператор when, то есть:

when(color) {
    is Red, Green, Blue -> // primary color work
    is Pink -> // pink color work
    is Yellow -> // yellow color work
}

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

В дополнение к другим ответам, вы можете сделать это немного более кратко, опуская is полностью:

when (color) {
    Red, Green, Blue -> // ...
    Pink -> // ...
    Yellow -> // ... 
}

Это проверяет значения на равенство, в отличие отis код, который проверяет типов .(Красный, зеленый и т. Д. Являются объектами, а также типами, поэтому оба варианта работают. Я подозреваю, что этот способ также может быть несколько более эффективным.)

0 голосов
/ 04 декабря 2018

Да.Согласно грамматике when


when
  : "when" ("(" expression ")")? "{"
        whenEntry*
    "}"
  ;
whenEntry
  : <b>whenCondition{","}</b> "->" controlStructureBody SEMI
  : "else" "->" controlStructureBody SEMI
  ;
whenCondition
  : expression
  : ("in" | "!in") expression
  : <b>("is" | "!is") type</b>
  ;

{","} означает, что элемент может повторяться больше раз, разделенных запятыми.Тем не менее, обратите внимание, что вам придется повторять is тоже, и умные трансляции не будут работать, если вы используете разные несвязанные типы.

...