我有一個枚舉,我爲其創建的反向查找表爲所有值返回null。查找表創建後,我添加了一個斷言,果然,它是空的。我覺得這是簡單而明顯的,我忽略了,因爲我對所有枚舉使用了完全相同的結構,並且它們工作正常。這個枚舉查找映射有什麼問題?
public enum TerrainType {
ROAD(1),
PLAINS(2),
FOREST(3),
MOUNTAINS(4);
private static final Map<Byte,TerrainType> lookup = new HashMap<Byte,TerrainType>();
private final byte terrainId;
static {
for(TerrainType type : EnumSet.allOf(TerrainType.class)) {
lookup.put(type.getByte(),type);
}
assert lookup.get(1) != null; // <--- THIS ASSERT FIRES, WHY?
}
TerrainType(int id) {
assert id > 0 && id < 128: "ID must be from 1 to 127";
this.terrainId = (byte) id;
}
public static TerrainType get(int id) {
return lookup.get(id);
}
public byte getByte() {
return this.terrainId;
}
}
您的地圖使用字節,而你的地圖(斷言表達式)試圖使用整數 –
因爲lookup.get(1 )返回ROAD,它不爲空。 – duffymo