有没有办法为枚举中的每个常量调用不同的方法?
public enum ShipType {
SMALL,MEDIUM,LARGE,ENORMOUS,TETRIS;
public int[][] getRegionOfShip(int[] startingPosition, Aligment aligment){
//How do can I decide which function to call?
}
private int[][] getRegionOfSmallShip(int[] startingPosition){
...
}
private int[][] getRegionOfMediumShip(int[] startingPosition, Aligment aligment){
...
}
private int[][] getRegionOfLargeShip(int[] startingPosition, Aligment aligment){
...
}
private int[][] getRegionOfEnourmusShip(int[] startingPosition, Aligment aligment){
...
}
private int[][] getRegionOfTetrisShip(int[] startingPosition, Aligment aligment){
...
}
}
当我像这样创建Enum时:
ShipType shipType = ShipType.SMALL;
我称之为:
shipType.getRegionOfShip(startingPosition,aligment);
如何制作,拨打
private int[][] getRegionOfSmallShip(int[] startingPosition)
方法? 比如检查在Enum类中调用哪个Constant
答案 0 :(得分:4)
不是创建一个单独的方法来调用每个枚举值,而是可以覆盖方法:
public enum ShipType {
SMALL{
@Override
public int[][] getRegionOfShip(int[] startingPosition, Aligment aligment){
}
},
MEDIUM{
@Override
public int[][] getRegionOfShip(int[] startingPosition, Aligment aligment){
}
};
public abstract int[][] getRegionOfShip(int[] startingPosition, Aligment aligment);
如果选择此选项,则可以避免在添加新的船舶类型时向ifs / switch添加案例,以及在没有编译时错误的情况下无法忘记实施该方法。
答案 1 :(得分:0)
Java没有函数指针,在这里创建一个类层次结构将是过度工程,所以只需一个开关:
public enum ShipType {
SMALL,MEDIUM,LARGE,ENORMOUS,TETRIS;
int[][] getRegionOfShip(startingPosition,aligment) {
if (this == SMALL) {
return getRegionOfSmallShip(startingPosition)
}
else if (this == MEDIUM) {
return getRegionOfMediumShip(startingPosition);
}
etc.
}
}