Я очень хорошо знаком с использованием Enums на других языках, но у меня есть некоторые трудности в Java с определенным использованием.
В документации Sun для Enums смело говорится:
"Перечисления языков программирования Java гораздо более мощные, чем их аналоги в других языках, которые чуть больше, чем прославленные целые числа."
Что ж, это здорово, но мне нужно иметь постоянное представление типов данных для каждого из перечислений, по причинам сравнения в операторе switch. Ситуация выглядит следующим образом: я создаю узлы, которые будут представлять данное пространство, или «слот» в графе лабиринта, и эти узлы должны быть в состоянии построить из двумерного целочисленного массива, который представляет лабиринт. Вот что у меня есть для класса MazeNode, в котором сейчас проблема (оператор переключателя лает):
ПРИМЕЧАНИЕ. Я знаю, что этот код не работает из-за динамического элемента в выражении case. Это там, чтобы проиллюстрировать то, что я после.
public class MazeNode
{
public enum SlotValue
{
empty(0),
start(1),
wall(2),
visited(3),
end(9);
private int m_representation;
SlotValue(int representation)
{
m_representation = representation;
}
public int getRepresentation()
{
return m_representation;
}
}
private SlotValue m_mazeNodeSlotValue;
public MazeNode(SlotValue s)
{
m_mazeNodeSlotValue = s;
}
public MazeNode(int s)
{
switch(s)
{
case SlotValue.empty.getRepresentation():
m_mazeNodeSlotValue = SlotValue.start;
break;
case SlotValue.end.getRepresentation():
m_mazeNodeSlotValue = SlotValue.end;
break;
}
}
public SlotValue getSlotValue()
{
return m_mazeNodeSlotValue;
}
}
Таким образом, код жалуется на оператор switch следующим образом: «выражения выражений должны быть константными выражениями» - я понимаю, почему у компилятора могут возникнуть проблемы, поскольку технически они динамические, но я не уверен, какой подход использовать для решения этот. Есть ли лучший способ?
Суть в том, что Enum должен иметь соответствующие целочисленные значения для сравнения с входящим двумерным массивом целых чисел в программе.