Иерархическое перечисление в Java

Скажем, у меня есть такая структура:

введите описание изображения здесь

Можно ли создать перечисление, которое вернет строковое значение выбранной ячейки? Например:

enum.GROUP_MAIN1.SUBGROUP1.COL1

вернет значение "COL1" .

Я искал вложенные перечисления, но не нашел решения этой ситуации.

Ответ 1

Вы можете сделать это с помощью трюка:

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

Итак, чтобы получить перечисление, вам нужно будет использовать GROUPMAIN1.SUBGROUP1.COL1.

Это также можно сделать по-другому, если все, что вам нужно, это просто строковые константы:

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

Ответ 2

У вас не может быть всего, о чем вы просите. Вот один из способов получить некоторые из них:

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

Вы также можете реализовать метод в MainGroup, чтобы найти все подгруппы в этой основной группе и то же самое для подгрупп и столбцов.