При попытке передать байт в качестве аргумента в функции сеттера вылазит ошибка
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;
}
}
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.
Вызов setValue() с аргументом в виде литерала 0 трактуется компилятором как вызов setValue(int ) - числовые литералы по умолчанию считаются как имеющие тип int
Поскольку в Java отсутствует байтовый литерал, то единственный способ это ручной кастинг на byte - setValue((byte )0);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости