Метод перегрузки с номером param [duplicate]

Я отвечу ужасным, нарисованным рукой комиком. Второе изображение является причиной того, что result является undefined в вашем примере кода.

190
задан vaxquis 30 October 2014 в 19:25
поделиться

6 ответов

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

241
ответ дан Community 28 August 2018 в 09:41
поделиться

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

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

, это позволит использовать f(0)

4
ответ дан Daniel Rikowski 28 August 2018 в 09:41
поделиться

Мне нужно бросить, я боюсь:

f((byte)0);

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

92
ответ дан Jon Skeet 28 August 2018 в 09:41
поделиться

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

byte b = 0; //Set to desired value.
f(b);
8
ответ дан Mike Yockey 28 August 2018 в 09:41
поделиться

С версией Java 7 и более поздней версии вы можете указать байтовый литерал таким образом: byte aByte = (byte)0b00100001;

Ссылка: http://docs.oracle.com/javase/8/docs /technotes/guides/language/binary-literals.html

-4
ответ дан Think Recursively 28 August 2018 в 09:41
поделиться

Вы можете использовать байтовый литерал в Java ... sort.

    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
24
ответ дан vaxquis 28 August 2018 в 09:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: