Несовместимые типы: байт не может быть преобразован в логическое значение - PullRequest
0 голосов
/ 28 октября 2019

У меня есть класс со значениями, которые я создаю как объект и отправляю сообщение главному обработчику. Я могу работать с int без проблем, но некоторые значения являются логическими. Здесь я сталкиваюсь со следующей ошибкой в ​​байтах [5] и байтах [6]

byte[] bytes = new byte[259];

message_to_device = new MyDevice(bytes[3], //int
                                 bytes[4], //int
                                 bytes[5], // boolean
                                 bytes[6]  // boolean);

Message message = Message.obtain();
message.obj = message_to_device;
message.what = MESSAGE;
mhandler.sendMessage(message);

Я сталкивался с BitSet, будет ли это полезным? Я не очень знаком с битами и пока в android. Любая идея, как действовать дальше, будет полезна.

1 Ответ

0 голосов
/ 28 октября 2019

Это может быть явно приведено:

new MyDevice(
    (int)       bytes[3], // integer value
    (int)       bytes[4], // integer value
    bytes[5] != (byte) 0, // boolean result
    bytes[6] != (byte) 0  // boolean result
);

Но это также работает без приведения, поскольку в Java можно использовать byte вместо int:

new MyDevice(bytes[3], bytes[4], bytes[5] != 0, bytes[6] != 0);

As определение для byte гласит:

Они также могут использоваться вместо int, где их пределы помогают прояснить ваш код;

тот факт, чтоограниченный диапазон переменной может служить формой документации.

Или добавить аналог конструктора: public MyDevice(byte, byte, byte, byte) или даже public MyDevice(byte[]). MyDevice может даже иметь сеттеры, принимающие значения byte, которые устанавливают поля boolean. Например:

class MyDevice {
    // public MyDevice(int arg0, int arg1, boolean arg2, boolean arg3) {}
    public MyDevice(byte arg0, byte arg1, byte arg2, byte arg3) {}
    public MyDevice(byte[] arg0) {}
}
...