Я смотрел на другие вопросы и до сих пор не могу понять это. Почему он не позволяет мне скомпилировать этот код с помощью оператора switch? Я получаю ошибку, что типичная ошибка "выражения случая должны быть постоянными выражениями". Я пытаюсь включить байт из сообщения. Я хочу использовать переключатель из-за проблем со скоростью и стараюсь не делать никаких преобразований, т. Е. Из int в байт. Мой класс Utils содержит PID перечисления с A, B, C ... в нем. Я хочу включить их, но сообщение, которое я получаю, в байтах.
public class SomeClass extends Thread {
public static final byte myCase1 = (byte) Utils.PID.A.ordinal();
public static final byte myCase2 = (byte) Utils.PID.B.ordinal();
public static final byte myCase3 = (byte) Utils.PID.C.ordinal();
private double[] findAllData(ByteBuffer message) {
byte[] byteBuffer = new byte[9000];
// parse through and find all PIDs
for(int i=0 ;i < message.capacity(); i++) {
message.position(i);
switch (message.get(i)) {
case myCase1 : break; // Compiler errors at the case statements
case myCase2 : break;// Compiler errors at the case statements
case myCase3 : break;// Compiler errors at the case statements
}
}
}
// Utility class
public class Utils {
public enum PID { A,B,C };
}