获取调用哪个枚举常量

时间:2014-07-05 20:42:26

标签: java enums constants

有没有办法为枚举中的每个常量调用不同的方法?

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

2 个答案:

答案 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.
   }
}