Иерархическое перечисление в 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
, чтобы найти все подгруппы в этой основной группе и то же самое для подгрупп и столбцов.