如何在Java中将枚举分成多个类别

时间:2017-12-13 07:34:48

标签: java enums

根据做出的决定,我有不同的原因。我基本上有3个类别,Approved GroupSuppressed GroupRejection Group。我的Rejection Group分为两个 - BlockAction。对此进行建模的最佳方法是什么?

我将把一个决定的类型存储在一个类中。

public class A{
    //some Members
    DecisionGroup decision
}

我将获得List<ClassA>并将要求将其拆分为4个列表,每个列表对应不同的类型。我想考虑使用枚举,但我不确定如何将拒绝分组分成两部分。

2 个答案:

答案 0 :(得分:3)

enum Category {
    Approved, Suppressed, Rejected;

enum Group {
    ApprovedGroup(Category.Approved),
    SuppressedGroup(Category.Suppressed),
    BlockRejectedGroup(Category.Rejected),
    ActionRejectedGroup(Category.Rejected);

    Group( Category category ){...}

    Category getCategory(){...}
}

枚举可以有属性,因此您可以定义4个组,并将“主要”类别作为定义列表的参数。

或者您甚至可以将List本身作为枚举组的属性。

或者,编写一个枚举类别,其中包含确定定义列表的组的方法。

enum Category {
   Approved  {
      @Override 
      public Group select(A a) {
           return Group.ApprovedGroup;
      }
   },
   Suppressed  {
      @Override 
      public Group select(A a) {
           return Group.SuppressedGroup;
      }
   },
   Rejected  {
      @Override 
      public Group select(A a) {
           ...
           return Group.BlockRejectedGroup;
           ...
           return Group.ActionRejectedGroup;
      }
   };

   public abstract Group select(A a);
}

答案 1 :(得分:2)

如果您的结构比枚举更复杂,请考虑编写自己的类。不要忘记覆盖equals / hashcode以确保两个相同的决策是“相等的”。