Как указать байтовый литерал в Java?

Если у меня есть метод

void f(byte b);

как я могу вызвать его с помощью числового аргумента без кастования?

f(0);

дает ошибку.

Ответ 1

Вы не можете. Базовая числовая константа считается целочисленной (или длинной, если следовать за "L" ), поэтому вы должны явно опустить ее в байт, чтобы передать ее в качестве параметра. Насколько я знаю, нет ярлыка.

Ответ 2

Вы должны бросить, я боюсь:

f((byte)0);

Я считаю, что будет выполнять соответствующее преобразование во время компиляции вместо времени выполнения, поэтому на самом деле это не приведет к штрафам за производительность. Это просто неудобно: (

Ответ 3

Вы можете использовать байтовый литерал в 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

Ответ 4

Если вы передаете литералы в коде, что мешает вам просто объявить это раньше времени?

byte b = 0; //Set to desired value.
f(b);

Ответ 5

Как насчет переопределения метода с помощью

void f(int value)
{
  f((byte)value);
}

это позволит f(0)