Відповіді:
Ви не можете. Основна числова константа вважається цілим числом (або довгим, якщо за ним слідує "L"), тому потрібно явно скинути його на байт, щоб передати його як параметр. Наскільки я знаю, немає ярлика.
byte b(int i) { return (byte) i; }
десь визначити простий метод помічника та статично імпортувати його. Тоді ви можете написати f (b (10)).
Ви боюсь,
f((byte)0);
Я вважаю, що буде виконано відповідну конверсію під час компіляції -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
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