web-dev-qa-db-ja.com

Javaでバイトリテラルをどのように指定しますか?

メソッドがある場合

void f(byte b);

キャストせずに数値引数で呼び出すにはどうすればよいですか?

f(0);

エラーが発生します。

213
Charbel

それはいけません。基本的な数値定数は整数(または「L」が続く場合は長い)と見なされるため、パラメータとして渡すには明示的にバイトにダウンキャストする必要があります。私の知る限り、近道はありません。

267
Robin

あなたはキャストする必要があります、私は恐れています:

f((byte)0);

execution timeの代わりにcompile-timeで適切な変換を実行すると信じているので、実際にパフォーマンスが低下することはありません。ただ不便です:(

110
Jon Skeet

Javaでバイトリテラルを使用できます。

    byte f = 0;
    f = 0xa;

0xa(int literal)は自動的にバイトにキャストされます。実際のバイトリテラルではありません(以下のJLSとコメントを参照)が、 それがカモのように鳴る場合、私はそれをカモと呼びます。

あなたができないことはこれです:

void foo(byte a) {
   ...
}

 foo( 0xa ); // will not compile

次のようにキャストする必要があります。

 foo( (byte) 0xa ); 

ただし、これらはすべてコンパイルされ、「バイトリテラル」を使用していることに注意してください。

void foo(byte a) {
   ...
}

    byte f = 0;

    foo( f = 0xa ); //compiles

    foo( f = 'a' ); //compiles

    foo( f = 1 );  //compiles

もちろんこれもコンパイルします

    foo( (byte) 1 );  //compiles
28
RickHigh

コードでリテラルを渡す場合、事前に単純に宣言するのを妨げるものは何ですか?

byte b = 0; //Set to desired value.
f(b);
10
Mike Yockey

メソッドをオーバーライドするのはどうですか

void f(int value)
{
  f((byte)value);
}

これにより、f(0)が可能になります

5
Boris Pavlović