Как передать байт в качестве параметра функции(сеттера)

355
12 сентября 2017, 08:04

При попытке передать байт в качестве аргумента в функции сеттера вылазит ошибка

The method setValue(byte) in the type XOGame is not applicable for the arguments (int)

тип this.value - byte

Вот сама функция

public void setValue(byte value) {
    this.value = value;
    switch(this.value) {
    case 0:
        setText(" ");
        break;
    case 1:
        setText("X");
        break;
    case 2:
        setText("O");
        break;
    }
}
Answer 1

The method setValue(byte) in the type XOGame is not applicable for the arguments (int)

Нельзя передавать int вместо byte (т.к. byte меньше int) - необходимо приводить тип вручную:

for (int i = 0; i < 9; i++) {
    buttons[i].setValue((byte) 0);
}

Если была бы обратная ситуация - атрибут класса имел тип int, то вы бы могли передавать byte - java сама выполнит приведение меньшего типа к большему, или т.н. преобразование с расширением без потери данных (byte, short к int, int к float и double и т.д.).
Аналогичная ситуация происходит, когда при вычислении некоторого выражения используются аргументы различных типов - результат приводит к типу наибольшего размера. Пример из документации:

19 specific conversions on primitive types are called the widening primitive conversions:
byte to short, int, long, float, or double
short to int, long, float, or double
char to int, long, float, or double
int to long, float, or double
long to float or double
float to double
A widening primitive conversion does not lose information about the overall magnitude of a numeric value.

Answer 2

Вызов setValue() с аргументом в виде литерала 0 трактуется компилятором как вызов setValue(int ) - числовые литералы по умолчанию считаются как имеющие тип int

Поскольку в Java отсутствует байтовый литерал, то единственный способ это ручной кастинг на byte - setValue((byte )0);

READ ALSO
SQLGrammarException: could not extract ResultSet

SQLGrammarException: could not extract ResultSet

Всем привет! Поставил сервер java + spring на VPS Ubuntu, запустил, полёт нормальный, но когда пытаюсь выдать JSON с сервера по ссылке http://13959

1010
Дамп базы MySql Java Ubuntu

Дамп базы MySql Java Ubuntu

Есть такой код Java:

446
Java диалоговое окно в случае ошибки

Java диалоговое окно в случае ошибки

Есть код запроса в удаленную БДКак сделать так, чтобы в случае любой ошибки в этом участке кода появлялось окно с ошибкой, или хотя бы со стандартной...

365