メソッドがある場合
void f(byte b);
キャストせずに数値引数で呼び出すにはどうすればよいですか?
f(0);
エラーが発生します。
それはいけません。基本的な数値定数は整数(または「L」が続く場合は長い)と見なされるため、パラメータとして渡すには明示的にバイトにダウンキャストする必要があります。私の知る限り、近道はありません。
あなたはキャストする必要があります、私は恐れています:
f((byte)0);
execution timeの代わりにcompile-timeで適切な変換を実行すると信じているので、実際にパフォーマンスが低下することはありません。ただ不便です:(
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
コードでリテラルを渡す場合、事前に単純に宣言するのを妨げるものは何ですか?
byte b = 0; //Set to desired value.
f(b);
メソッドをオーバーライドするのはどうですか
void f(int value)
{
f((byte)value);
}
これにより、f(0)
が可能になります