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



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



void f(byte b);


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



f(0);


выдает ошибку.

521   6  

6 ответов:

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

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

f((byte)0);

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

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

Comments

    Ничего не найдено.