私は他の言語で列挙型を使用することに非常に精通していますが、特定の用途で Java を使用するのに苦労しています。
Enums に関する Sun のドキュメントには、次のように大胆に記載されています。
「Javaプログラミング言語の列挙型は、他の言語の対応するものよりもはるかに強力です.
まあ、それは素晴らしいことですが、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 ステートメントで「case 式は定数式でなければなりません」と文句を言います。技術的には動的であるため、コンパイラに問題が発生する理由はわかりますが、これを解決するためにどのようなアプローチをとればよいかわかりません。より良い方法はありますか?
肝心なのは、Enum に、プログラム内の整数の 2D 配列と比較するための対応する整数値が必要であるということです。