如何正确使用嵌套枚举? [Java]

问题描述 投票:0回答:1

我想在扑克中实现手牌范围,它基本上是一组两张牌(=手牌)。 由于一个范围可以容纳很多手,所以我想创建“默认”范围并从那里调整我的范围。我想按以下方式进行:
- 掌握我范围的范围类
- 为预定义范围创建内部枚举

有更好的方法吗?我将枚举嵌套在范围类中,以通过路径 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;

我错过了显而易见的事情吗?

java enums nested
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.