打开一个字节

如何打开Byte值? 显而易见的方法是:

 fun foo(b: Byte): Boolean { return when(b) { 0 -> true else -> false } } 

但在编译时失败

 src/ByteSwitch.kt:3:5: error: incompatible types: kotlin.Int and kotlin.Byte 0 -> true ^ 

有没有办法使0是一个字节文字?

你不能在Kotlin中指定字节字面值( 你也不能在Java中 )。 从文字常量 – 基本类型 – Kotlin编程语言

对于整数值有以下几种常量:

  • 小数: 123
    • 123L标有大写L123L
  • 十六进制: 0x0F
  • 二进制文件: 0b00001011

但是,您可以声明编译器时间常量,以避免在运行时将Int转换为Byte

 const val ZERO_BYTE: Byte = 0 fun foo(b: Byte): Boolean { return when (b) { ZERO_BYTE -> true else -> false } } 

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

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

每Ilya ,“ 0.toByte()在编译时评估,所以在运行时没有转换成本。”