2011-12-29 20 views
5

1300の値を持つJava enumを取得し、整理されたグループに入れるために推奨される方法は何ですか?私はあなたが列挙グループを拡張することはできないことを知っています。他の良い選択肢がありますか?大規模なJava enumの解読

答えて

7

これらのインスタンスがすべて共有するインターフェイスを使用して、任意の数の列挙型を使用するか、ファイルやデータベースなどの別のデータソースからそれらを読み込むことができます。

+0

。それらをファイルまたはデータベースからロードします。ただし、いくつかの列挙型の中にメソッド実装がある場合は、インタフェースを定義し、メソッドが定義されている列挙型ごとに個別の実装を作成し、データベースまたはファイルから値を受け取る1つのデフォルトの実装を検討してください。メソッドが定義されていない場合は、単にPOJOを作成します。 – Saish

2

oopsの観点から見ると、それらを凝集単位に分解することは良い考えです。私があなたであれば、私はこれらの列挙型のどれが責任のために結束しているのか評価します。

4

1300値?それは良いアイデアだと思っていた良い神ですか?それが100を過ぎてしまった人にはあまりにも大きくなっていないのでしょうか?

私が見ることができるその周りに良い方法はありません。シャベルを入手し、それらをより密接なサブenumsに結合し始める。

ここに質問があります:どのように使用されますか?それらがアプリケーション構成の一部である場合は、コードに保管するのではなくデータベースに移動することをお勧めします。彼らはそのように柔軟になるでしょう。

+1

これは実際にはすでにデータベースに入っています。これらの列挙型は、エラーコードのリストの主キーです。たとえば、 'NO_DATA_FOUND'列挙型キーは、「申し訳ありませんが、あなたの要求をデータベースで見つけることができません」を指しています。 – yd39

5

のようにあなたがそれらを破ることができます。私は心から同意

import java.util.*; 
interface Children { 
    Set<Enum<?>> children(); 
} 
enum Dog implements Children { 
    myDog,yourDog; 
    Dog() { 
     this(null); 
    } 
    Dog(Set<Enum<?>> children) { 
     this.children=children; 
    } 
    @Override public Set<Enum<?>> children() { 
     return children!=null?Collections.unmodifiableSet(children):null; 
    } 
    Set<Enum<?>> children; 
} 
enum Animal implements Children { 
    cat,dog(EnumSet.allOf(Dog.class)); 
    Animal() { 
     this(null); 
    } 
    Animal(Set children) { 
     this.children=children; 
    } 
    @Override public Set<Enum<?>> children() { 
     return children!=null?Collections.unmodifiableSet(children):null; 
    } 
    Set<Enum<?>> children; 
} 
enum Thing implements Children { 
    animal(EnumSet.allOf(Animal.class)),vegetable,mineral; 
    Thing() { 
     this(null); 
    } 
    Thing(Set children) { 
     this.children=children; 
    } 
    @Override public Set<Enum<?>> children() { 
     return children!=null?Collections.unmodifiableSet(children):null; 
    } 
    Set<Enum<?>> children; 
} 
public class So8671088 { 
    static void visit(Class<?> clazz) { 
     Object[] enumConstants = clazz.getEnumConstants(); 
     if (enumConstants[0] instanceof Children) for (Object o : enumConstants) 
      visit((Children) o, clazz.getName()); 
    } 
    static void visit(Children children, String prefix) { 
     if (children instanceof Enum) { 
      System.out.println(prefix + ' ' + children); 
      if (children.children() != null) for (Object o : children.children()) 
       visit((Children) o, prefix + ' ' + children); 
     } else 
      System.out.println("other " + children.getClass()); 
    } 
    public static void main(String[] args) { 
     visit(Thing.animal," "); 
     visit(Thing.class); 
    } 
} 
関連する問題