我有两个数组:Walls 和 Neighbors。
public boolean[] walls = new boolean[4];
public Cell[] neighbors = new Cell[4];
我有一个枚举:
enum Dir
{
North,
South,
East,
West
}
现在,我希望能够通过他们的方向访问墙壁或邻居,所以我不必传递一堆魔法索引。
但是,当我阅读 Enum.ordinal() 的文档时,它说程序员几乎不会使用这种方法,这让我认为它不应该以这种方式使用。
我正在考虑做类似的事情:
List<Dir> availableDirections = new ArrayList<Dir>();
for(Dir direction : Dir.values())
if (!Neighbors[direction.ordinal()].Visited)
availableDirections.add(direction);
甚至:
return Neighbors[Dir.North.ordinal()];
我应该恢复使用为 NORTH、SOUTH、EAST、WEST 设置索引值的静态常量还是使用 Enum 的序数方法?
最佳答案
在切线问题上,最好为您的邻居使用 EnumMap:
Map<Dir, Cell> neighbours =
Collections.synchronizedMap(new EnumMap<Dir, Cell>(Dir.class));
neighbours.put(Dir.North, new Cell());
for (Map.Entry<Dir, Cell> neighbour : neighbours.entrySet()) {
if (neighbour.isVisited()) { ... }
}
etc..
顺便说一句:枚举实例按照惯例应该全部大写,
enum Dir {
NORTH,
EAST,
SOUTH,
WEST
}
关于java - 使用 Enum 的序数值来索引 Java 中的数组是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574580/