回答:
できません。基本的な数値定数は整数(または "L"が続く場合はlong)と見なされるため、明示的にバイトにダウンキャストしてパラメーターとして渡す必要があります。私の知る限り、近道はありません。
byte b(int i) { return (byte) i; }
どこかに単純なヘルパーメソッドを定義して静的にインポートできます。次に、f(b(10))を記述できます。
あなたがキャストする必要があります、私は恐れています:
f((byte)0);
私はそれが実行時ではなくコンパイル時に適切な変換を実行すると信じていますので、それは実際にパフォーマンスのペナルティを引き起こすつもりはありません。それだけで不便です:(
Javaではバイトリテラルを使用できます。
byte f = 0;
f = 0xa;
0xa
(intリテラル)は自動的にバイトにキャストされます。これは実際のバイトリテラルではありませんが(下記の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
1
intリテラルですが、double d = 1;
正常にコンパイルされます。
byte b(int i){}
、とb(1)
同じくらい長く、トリッキーではありませんf=1
。
コードでリテラルを渡す場合、事前にそれを宣言することを妨げているのは何ですか?
byte b = 0; //Set to desired value.
f(b);
public static final byte BYTE_MASK = ( byte )0xff;
byte BYTE_MASK = 0x000000ff;
、いくつかの厄介な符号拡張のバグが発生しないように、私は実際に欲しがっていることに気付きました。
メソッドをオーバーライドしてどうですか?
void f(int value)
{
f((byte)value);
}
これにより、 f(0)
Java 7以降のバージョンでは、次のようにバイトリテラルを指定できます。
byte aByte = (byte)0b00100001;
リファレンス:http : //docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html