打开字节

Cac*_*tus 3 literals switch-statement kotlin

我怎样才能打开一个Byte值?显而易见的方法是:

fun foo(b: Byte): Boolean {
  return when(b) {
    0 -> true
    else -> false
  }
}
Run Code Online (Sandbox Code Playgroud)

但是在编译时失败了

src/ByteSwitch.kt:3:5: error: incompatible types: kotlin.Int and kotlin.Byte
    0 -> true
    ^
Run Code Online (Sandbox Code Playgroud)

有没有办法让它0成为字节文字?

rua*_*akh 7

由于Kotlin允许分支条件是任意表达式(不一定是常量),一种方法是接受0将是一个Int并简单地将它明确地转换为Byte:

fun foo(b: Byte): Boolean {
  return when(b) {
    0.toByte() -> true
    else -> false
  }
}
Run Code Online (Sandbox Code Playgroud)

Per Ilya," 0.toByte()在编译时进行评估,因此在运行时无需转换成本."

  • `0.toByte()`在编译时进行评估,因此在运行时不需要转换成本. (3认同)