0

現在、私はと呼ばれるクラスを持っていTestEnumます。私のmain方法では、に属し、属していることを指定する必要なくfirstEnum、作業できます。コードはこれを整理します。secondEnumfirstEnumGroupAsecondEnumGroupBTestEnum

または のいずれfirstEnumsecondEnumが 3 つの のいずれかに関連付けられているとしますSubGrouping enum。メソッド内からこの関連付けを作成できるようにしたいと考えていますmain。from within に割り当てられているGroupingため、と同じアプローチを使用できないことは明らかです。GroupAfirstEnumTestEnum

public enum TestEnum {
    firstEnum (Grouping.GroupA),
    secondEnum (Grouping.GroupB);


    private Grouping group;
    TestEnum(Grouping group) {
        this.group = group;
    } 

    public enum Grouping {
        GroupA, GroupB;
    }
    public enum SubGrouping {
        SubGroup1, SubGroup2, SubGroup3;
    }
}

どうすればいいですか?より具体的には、次のようなオブジェクトを構築するとよいでしょう。

TestEnum enumWithinMainMethod = TestEnum.firstEnum(SubGrouping.SubGroup1)

このインスタンスの望ましい動作は、 と の両方に属することSubGroup1ですGroupA。次に、そのようなインスタンスから、次のような機能があればよいでしょう。

switch(enumWithinMainMethod) {
    case firstEnum:
        // Do something associated with firstEnum
    case secondEnum:
        // Do something associated with secondEnum
    default:
        // ...
}
4

2 に答える 2

-1

enumの外部からコンストラクターを呼び出すことはできませんenum。クラスを使用して、この動作を取得できます。

このようなものはどうですか?(ジェネリックは必須ではありませんが、Groupableクラスを複数のタイプのグループ化に開放します。)

public enum Grouping { GroupA, GroupB; }
public enum SubGrouping { SubGroup1, SubGroup2, SubGroup3; }
public class SubGroupable<G extends Enum<G>,S extends Enum<S>> {
    private G mainGroup;
    private S subGroup;
    public Groupable(G group, S subGroup) {
        this.mainGroup = group;
        this.subGroup = subGroup;
    }
    public G getGroup() { return mainGroup; }
    public S getSubGroup() { return subGroup; }
}

使用法

SubGroupable<Grouping, SubGrouping> g 
        = new SubGroupable<>(Grouping.GroupA, SubGrouping.SubGroup2);
switch (g.getGroup()) {
case Grouping.GroupA: 
    //
    break;
case Grouping.GroupB:
    //
    break;
}

2 つの最終グループを作成することもできます。

public final Grouping FIRST_GROUP = Grouping.GroupA;
public final Grouping SECOND_GROUP = Grouping.GroupB;

caseこのようにして、これらの定数をブロックで使用できます。

switch (g.getGroup()) {
case FIRST_GROUPING: // etc
}
于 2013-10-31T03:12:08.270 に答える