2017-12-13 8 views
0

私は、どのような決定を下したかに基づいて、さまざまな理由があります。私は基本的に3つのカテゴリー、Approved GroupSuppressed GroupおよびRejection Groupを持っています。私のRejection Groupは、BlockActionの2つに分割されています。これをモデル化する最良の方法は何でしょうか?enumをJavaの複数のカテゴリに分割する方法

デシジョンのタイプをクラスに格納します。

public class A{ 
    //some Members 
    DecisionGroup decision 
} 

私はList<ClassA>を取得され、4つのリスト、異なるタイプごとに1つのそれぞれにこれを分割する必要されます。私はenumで行くことを考えていましたが、どのようにRejection Groupを2つに分割するのか分かりません。

+0

「私の拒否グループは2つのブロックに分割され、アクションは理解できませんでした。おそらくあなたはあなたの列挙とグループを示しているでしょう。 enumグループについて、私は通常このグループのenum値を持つ定数java.util.EnumSetを使用し、containsメソッドを使ってチェックします。 –

+0

@ZufarMuhamadeev 2つに分割すると、ブロックとアクションという2つのタイプが含まれていることを意味します。グループの残りのタイプはありません – user1692342

答えて

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グループのプロパティにすることもできます。

また、リストを定義するグループを決定するメソッドを含むenumカテゴリを記述します。

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

ありがとう、これはこれにアプローチするより良い方法だね。また、ブロックやアクションの拒否グループに基づいてClassAのリストを分割する方法はありますか? – user1692342

+0

@ user1692342 DecisionGroupの値は何ですか?彼らは私の 'enum Group'と同じことができますか? – laune

+0

@luane classAにグループではなくカテゴリが含まれていてはなりませんか? – user1692342

2

構造体が列挙型よりも複雑な場合は、独自のクラスを作成することを検討してください。 equals/hashcodeを上書きして、2つの同じ決定が「等しい」ことを確認してください。

+0

私はそれが一定の文字列の束であるので十分なenumは良いと思う – user1692342

関連する問題