Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中将枚举拆分为多个类别_Java_Enums - Fatal编程技术网

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

如何在Java中将枚举拆分为多个类别,java,enums,Java,Enums,我有不同的理由来做决定。我基本上有三个类别,批准组,禁止组和拒绝组。我的拒绝组分为两个-块和动作。对此进行建模的最佳方式是什么 我将在类中存储决策的类型 public class A{ //some Members DecisionGroup decision } 我将得到一个列表,需要将其分为4个列表,每个列表对应不同的类型。我曾考虑使用枚举,但我不确定如何将拒绝组一分为二。如果您的结构比枚举更复杂,请考虑编写自己的类。不要忘记覆盖equals/hashcode,以确保两个相

我有不同的理由来做决定。我基本上有三个类别,
批准组
禁止组
拒绝组
。我的
拒绝组
分为两个-
动作
。对此进行建模的最佳方式是什么

我将在类中存储决策的类型

public class A{
    //some Members
    DecisionGroup decision
}

我将得到一个
列表
,需要将其分为4个列表,每个列表对应不同的类型。我曾考虑使用枚举,但我不确定如何将拒绝组一分为二。

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

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

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

或者,您甚至可以将列表本身作为枚举组的属性

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

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);
}
枚举可以有属性,因此您可以定义4个组,并将“主要”类别作为定义列表的参数

或者,您甚至可以将列表本身作为枚举组的属性

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

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);
}

“我的拒绝小组分为两个街区和行动”——我不明白。也许你应该显示你的枚举和组。关于枚举组,我使用常量java.util.EnumSet和该组中的枚举值,并使用contains方法进行检查。@ZufarMuhamadeev通过拆分为两个,我的意思是它包含两种类型:Block和Action。其余的小组并没有类型“我的拒绝小组被分成两个区块和行动”-我不明白。也许你应该显示你的枚举和组。关于枚举组,我使用常量java.util.EnumSet和该组中的枚举值,并使用contains方法进行检查。@ZufarMuhamadeev通过拆分为两个,我的意思是它包含两种类型:Block和Action。其他组没有类型。我认为enum足够好,因为它只是一堆常量字符串。我认为enum足够好,因为它只是一堆常量字符串。这似乎是一种更好的方法。另外,我将如何根据块或动作拒绝组拆分ClassA列表?@user1692342 DecisionGroup的值是什么?它们是否与我的
枚举组
相同?@luane classA不应该包含类别而不是组吗?我现在有点困惑-四个列表还是三个列表,如何区分块和操作?我需要提取4个列表。我想把类别保留在classA中,但我想直接把这个组放进去是有意义的。谢谢,这似乎是一个更好的方法。另外,我将如何根据块或动作拒绝组拆分ClassA列表?@user1692342 DecisionGroup的值是什么?它们是否与我的
枚举组
相同?@luane classA不应该包含类别而不是组吗?我现在有点困惑-四个列表还是三个列表,如何区分块和操作?我需要提取4个列表。我想把类别保留在classA中,但我想直接把这个组放进去是有意义的。