2016-11-19 29 views
3

如何打开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是文字字节?

回答

1

您不能在Kotlin中指定字节文字(nor can you in Java)。从Literal Constants - Basic Types - Kotlin Programming Language

有对整体 值以下几种字面常量:

  • 小数:123L
  • 123
    • 多头由资本L标签十六进制:0x0F
    • 二进制文件:0b00001011
  • 但是,您可以声明compiler-time constants,以避免在运行时转换的IntByte

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

    由于科特林允许分支条件是任意表达式(不一定是常数),一种方法是接受了0将是一个Int,只是明确地将其转换为一个Byte

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

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

    +0

    多么的低效这一点,如果我将做这在一个紧密的循环? – Cactus

    +0

    我会说java将在内部完成相同的操作。 – elect

    +0

    您可以将'0.toByte()'提取到局部变量中以提高效率。不确定JIT不会执行它 – voddan