Если у меня есть метод
void f(byte b);
как я могу вызвать его с помощью числового аргумента без кастования?
f(0);
дает ошибку.
Если у меня есть метод
void f(byte b);
как я могу вызвать его с помощью числового аргумента без кастования?
f(0);
дает ошибку.
Вы не можете. Базовая числовая константа считается целочисленной (или длинной, если следовать за "L" ), поэтому вы должны явно опустить ее в байт, чтобы передать ее в качестве параметра. Насколько я знаю, нет ярлыка.
Вы должны бросить, я боюсь:
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
Если вы передаете литералы в коде, что мешает вам просто объявить это раньше времени?
byte b = 0; //Set to desired value.
f(b);
Как насчет переопределения метода с помощью
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