【发布时间】:2016-12-23 19:15:18
【问题描述】:
尝试为存在于另一个类中的枚举实现 switch case 语句。我已经为大家清除了无用的代码。 我的问题出现在第二行的第二个代码段。
我目前的猜测是它不喜欢枚举中的字节转换,因为它试图将其用作索引。如果是这种情况,我该如何将字节获取到要测试的索引?我应该提到我以前使用过这种技术,但使用标准整数转换。例如“value(1)”。所以我想我理解这是如何工作的概念?但现在我第二次猜测自己并最终陷入困境。我试图用谷歌搜索这个问题的鼻涕,但我一直在做空。
在枚举的字节转换上是否可以使用 switch case???,如果是这样,有人可以帮助启发我的 java 技能,或者请指出一个更好的方法来测试我的字节。最好是 if else 语句以外的东西?我只是觉得 switch 语句看起来更整洁。
编辑: 所以我似乎理解出界的问题,但这并不能回答我如何着手修复出界以仍然使用我目前拥有的字节枚举的问题?除了为 -15 做一个特定的 if 语句之外?
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;
}
}
}
这是我想要完成的 Switch 案例。我得到的错误是 “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 android enums switch-statement byte