다른 언어로 열거 형을 사용하는 것에 익숙하지만 특정 용도로 Java에서 어려움을 겪고 있습니다.Java의 열거 형 표현에 대한 switch 문
열거 형의 Sun 설명서 대담 상태 :
. "자바 프로그래밍 언어 열거되어 훨씬 더 강력한 영광 정수보다는 조금 더 많은 다른 언어에서의 대응보다"
글쎄, 그건 멋쟁이 야.하지만 switch 문에서 비교하기 위해 각각의 열거 형에 대해 일정한 데이터 유형 표현이 필요하다. 상황은 다음과 같습니다. 저는 미로 그래프에서 주어진 공간 또는 '슬롯'을 나타내는 노드를 만들고 있는데,이 노드는 미로를 나타내는 2D 정수 배열로 구성 할 수 있어야합니다. 다음은 현재 문제가있는 MazeNode 클래스에 대한 것입니다 (switch 문은 짖는 소리입니다).
참고 : 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 문에 불만 - 컴파일러가 문제가 이유를 기술적으로 동적이기 때문에 내가 볼 수 있습니다,하지만 난 모르겠어요 무엇을 이를 해결하기위한 접근법. 더 좋은 방법이 있습니까?
결론은 프로그램의 정수 2 차원 배열에 대한 비교를 위해 해당 정수 값을 갖기 위해 열거 형을 필요로합니다.
이것은 Matthew가 위에 말한 것과 거의 같지만 좋은 해결책 인 것 같습니다. –
Ray Tayek의 솔루션에서 스로인 예외가 발생했습니다. –
니스. 실제로 매핑 및 정적 생성자를 열거 형 내부로 이동할 수 있습니다. –