Я очень хорошо знаком с использованием Enums на других языках, но у меня с некоторыми трудностями возникает Java.Заявление о переключении для представлений значений контировки в Java
документация ВС для Перечисления смело заявляет:
«язык программирования Java перечислений являются гораздо более мощным, чем их аналоги на других языках, которые немного больше, чем прославил целые числа.»
Ну, это денди, но мне нужно иметь постоянное представление типа данных для каждого из Enums для сравнения в инструкции switch. Ситуация такова: я строю узлы, которые будут представлять заданное пространство или «слот» в графе лабиринта, и эти узлы должны быть построены из массива 2D целого, который представляет лабиринт. Вот что у меня есть для класса 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;
}
}
Так код жалуется на заявление переключателя с «случае выражения должны быть константными выражениями» - Я могу понять, почему компилятор может возникнуть проблемы, так как технически они являются динамическими, но я не уверен, что подход к решению этого. Есть ли способ лучше?
В нижней строке мне нужно, чтобы Enum имел соответствующие целочисленные значения для сравнения с входящим 2D-массивом целых чисел в программе.
Это более или менее то, что сказал Матфей выше, что звучит как хорошее решение. Спасибо –
Украденное исключение, брошенное из решения Рэй Тайек. –
Ницца. Вы можете переместить отображение и статический конструктор внутри перечисления. –