如何正确使用嵌套枚举? 【JAVA]

时间:2017-05-09 22:23:11

标签: java enums nested

我想在扑克中实现手牌范围,基本上是一组两张牌(=手牌)。 由于范围可以容纳很多手,我想创建“默认”范围并从那里调整我的范围。我想通过以下方式做到这一点:
- 握住我的射程范围的范围类
- 为预定义范围创建内部枚举

有更好的方法吗?我在范围类中嵌套了枚举,以通过路径Range.Predefined来提高可读性。*。尽管如此,它感觉有点笨拙,特别是我设置范围的部分。

public class Range{
    ArrayList<Hand> range;

    public Range(ArrayList<Hand> r){
        this.range = r;
    }

    public void addHandToRange(Hand hand){
        //add a hand to range
    }
    public void removeHandFromRange(Hand hand){
        //remove a hand from range
    }

    public enum Predefined{
        RANGE_1, RANGE_2, RANGE_3;
        ArrayList<Hand> predefinedRange;

        //some code to set up predefined ranges 1-3

        public ArrayList<Hand> getRange() {
            //getRange
        }
    }
}

然后我可以使用预定义的范围设置我的范围,并从那里开始(但是很多代码,只使用枚举方法......):

Range myRange = new Range(Range.Predefined.RANGE_1.getRange());

我宁愿有类似以下的解决方案。这需要将“Range”更改为Enum类型,我不想这样做(因为Range应该保持可变 - 应该避免使用可变的枚举)。

Range myRange = PredefinedRange.RANGE_1;

我错过了明显的吗?

1 个答案:

答案 0 :(得分:0)

为什么你需要使用枚举?

你可以让Range类保留一些公共静态最终Range变量。

public class Range{
  public static final Range TOP_PAIR_RANGE = new Range(...)
  public static final Range SUITED_CONNECTOR_RANGE = new Range(...)
  public static final Range ACE_SUITED_RANGE = new Range(...)
  ...
}

然后引用它

Range myRange = Range.TOP_PAIR_RANGE;