2016-07-15 122 views
11

Diciamo che ho una struttura come questa:enum gerarchica in Java

enter image description here

E 'possibile creare un enum che restituirà il valore stringa della cella selezionata? Per esempio:

enum.GROUP_MAIN1.SUBGROUP1.COL1 

restituirà valore "COL1".

Stavo cercando enumerazioni annidate ma non ho trovato la soluzione a questa situazione.

+2

Possibile duplicato di [Estensione di enum in Java] (http://stackoverflow.com/questions/6511453/extending-a-enum-in-java) – Silverclaw

+1

Non sono sicuro al 100% cosa intendi annidando un enum, ma anche se fosse possibile, non dovresti farlo. – Silverclaw

+0

@ Silverclaw perché no? –

risposta

7

È possibile farlo con una tale trucco:

public interface GROUPMAIN1 { 
    enum SUBGROUP1 implements GROUPMAIN1 { 
     COL1, 
     COL2, 
     COL3 
    } 
    enum SUBGROUP2 implements GROUPMAIN1 { 
     COL3, 
     COL4 
    } 
} 

Quindi, per ottenere ENUM è necessario utilizzare GROUPMAIN1.SUBGROUP1.COL1.

può anche essere fatto in un altro modo, se tutto ciò che serve è solo un costanti stringa:

public interface GROUPMAIN1 { 
    interface SUBGROUP1 { 
     String COL1 = "COL1"; 
     String COL2 = "COL2"; 
    } 
    interface SUBGROUP2 { 
     String COL3 = "COL3"; 
     String COL4 = "COL4"; 
    } 
} 
1

Non si può avere tutto ciò che chiedete. Ecco un modo di ottenere alcuni di essi:

enum MainGroup { GROUP_MAIN1, GROUP_MAIN2 }; 

enum Subgroup { 
    SUBGROUP1(MainGroup.GROUP_MAIN1), SUBGROUP2(MainGroup.GROUP_MAIN1), 
    SUBGROUP3(MainGroup.GROUP_MAIN2), SUBGROUP4(MainGroup.GROUP_MAIN2); 

    MainGroup main; 

    private Subgroup(MainGroup main) { 
     this.main = main; 
    } 

    public MainGroup getMainGroup() { 
     return main; 
    } 

} 

enum Col { 
    COL1(Subgroup.SUBGROUP1), COL2(Subgroup.SUBGROUP1), COL3(Subgroup.SUBGROUP2), COL4(Subgroup.SUBGROUP2), 
    COL5(Subgroup.SUBGROUP3), COL6(Subgroup.SUBGROUP3), COL7(Subgroup.SUBGROUP4), COL8(Subgroup.SUBGROUP4); 

    Subgroup sub; 

    private Col(Subgroup sub) { 
     this.sub = sub; 
    } 

    public MainGroup getMainGroup() { 
     return sub.getMainGroup(); 
    } 

    public Subgroup getSubgroup() { 
     return sub; 
    } 
} 

È anche possibile implementare un metodo in MainGroup per trovare tutti i sottogruppi sotto quel gruppo principale, e lo stesso per sottogruppi e colonne.