Попытка реализовать оператор case switch для перечисления, который живет в другом классе. я очистил бесполезный код для всех вас. Моя проблема возникает во втором сегменте кода во второй строке.Как сделать SwitchStatement при перечислении с байтовыми отливками?
Мое последнее предположение: ему не нравится кастинг в байтах в перечислении, потому что он пытается использовать это как индекс. Если это так, как я могу получить байт для индекса, который будет проверен? Должен упомянуть, что я использовал эту технику раньше, но со стандартным отливом. так что «значение (1)», например. Поэтому я подумал, что понимаю концепцию того, как это работает? но теперь я второй угадываю себя и завязал. Я попытался вывести сок из этой проблемы, но я продолжаю идти вверх.
Возможна ли замена случае на байтовых списках перечисления ???, если да, то кто-то может помочь с просвещением моих навыков java, или, пожалуйста, укажите мне лучший метод тестирования моего байта. желательно что-то иное, чем если бы были другие заявления? Я просто подумал, что он выглядит аккуратно с оператором switch.
EDIT: Так я, по всей видимости понять проблему outofbounds, но это не дает ответа на вопрос о том, как я идти о фиксации outofbounds по-прежнему работать с байт перечисления, я в настоящее время есть ?? кроме создания конкретной инструкции if для -15?
public class OtherClass {
public enum Ack_Nak{
ACK((byte)0x01),
NAK((byte)0x00),
NAK_SIZE((byte)0x51),
NAK_CRC((byte)0xCC),
NAK_DATA((byte)0xD8),
NAK_FILE((byte)0xF1);
private final byte i;
Ack_Nak(final byte i) {
this.i = i;
}
public byte getByte() {
return i;
}
}
}
Вот коммутатор случае я пытаюсь выполнить. ошибка я получаю "java.lang.ArrayIndexOutOfBoundsException: длина = 6; индекс = -15"
byte ack_nak = anotherClass.getDataByte();
OtherClass.Ack_Nak Ack_Naks = OtherClass.Ack_Nak.values()[ack_nak]; // Problem Here
switch (Ack_Naks) {
case ACK:
//do something here
break;
case NAK:
case NAK_CRC:
case NAK_DATA:
case NAK_FILE:
case NAK_SIZE:
Toast.makeText(MainActivity.this,Ack_Naks.name() , Toast.LENGTH_SHORT).show(); //show failure
//act on the failure here
break;
default: //just incase
break;
}
Возможный дубликат [Что вызывает java.lang.ArrayIndexOutOfBoundsException и как его предотвратить?] (Http://stackoverflow.com/questions/5554734/what-causes-a-java-lang-arrayindexoutofboundsexception-and- how-do-i-prevent-it) –