使用方法和靜態塊
列舉可以包含方法,就像任何類一樣。要了解其工作原理,我們將宣告一個這樣的列舉:
public enum Direction {
NORTH, SOUTH, EAST, WEST;
}
讓我們有一個方法,以相反的方向返回列舉:
public enum Direction {
NORTH, SOUTH, EAST, WEST;
public Direction getOpposite(){
switch (this){
case NORTH:
return SOUTH;
case SOUTH:
return NORTH;
case WEST:
return EAST;
case EAST:
return WEST;
default: //This will never happen
return null;
}
}
}
通過使用欄位和靜態初始化程式塊可以進一步改進這一點:
public enum Direction {
NORTH, SOUTH, EAST, WEST;
private Direction opposite;
public Direction getOpposite(){
return opposite;
}
static {
NORTH.opposite = SOUTH;
SOUTH.opposite = NORTH;
WEST.opposite = EAST;
EAST.opposite = WEST;
}
}
在該示例中,相反方向儲存在私有例項欄位 opposite
中,其在第一次使用 Direction
時被靜態初始化。在這種特殊情況下(因為 NORTH
引用 SOUTH
而且相反),我們不能在這裡使用 Enums 和建構函式 (建構函式 NORTH(SOUTH),
SOUTH(NORTH),
EAST(WEST), WEST(EAST)
會更優雅並且允許 opposite
被宣告為 final
,但是它將是自引用的,因此是不允許的)。