2016-11-19 5 views
3

Byteの値をどのように切り替えることができますか?バイトをオンに切り替える

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

それは0リテラルバイトであることを確認する方法はあり

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

でコンパイル時に失敗:明白な方法は、でしょうか?

答えて

1

Kotlin(nor can you in Java)でバイトリテラルを指定することはできません。

  • 小数:123L
  • 123

    ます。ただし、実行時にByteIntの変換を避けるためにcompiler-time constantsを宣言することができます。

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

    Kotlinは、分岐条件が任意の式(必ずしも定数)にすることができるので、1つのアプローチは、0Intよく、単にByteに明示的に変換することを受け入れることである。

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

    、 "0.toByte()はコンパイル時に評価されるため、実行時に変換のコストはかかりません。"

    +0

    私がやっているつもりです場合は、この方法は非効率的ですタイトなループでこれは? – Cactus

    +0

    私はjavaが内部的に同じことをすると言うでしょう。 – elect

    +0

    '0toByte()'を効率のためにローカル変数に取り出すことができます。 JITは既にそれをしていません – voddan

    関連する問題