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