Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的层次枚举_Java_Enums_Hierarchical - Fatal编程技术网

Java中的层次枚举

Java中的层次枚举,java,enums,hierarchical,Java,Enums,Hierarchical,假设我有一个这样的结构: 是否可以创建一个枚举来返回所选单元格的字符串值?例如: enum.GROUP_MAIN1.SUBGROUP1.COL1 将返回值“COL1” 我正在寻找嵌套枚举,但没有找到解决此问题的方法。您可以使用以下技巧: public interface GROUPMAIN1 { enum SUBGROUP1 implements GROUPMAIN1 { COL1, COL2, COL3 } enum

假设我有一个这样的结构:

是否可以创建一个枚举来返回所选单元格的字符串值?例如:

enum.GROUP_MAIN1.SUBGROUP1.COL1
将返回值“COL1”


我正在寻找嵌套枚举,但没有找到解决此问题的方法。

您可以使用以下技巧:

public interface GROUPMAIN1 {
    enum SUBGROUP1 implements GROUPMAIN1 {
        COL1,
        COL2,
        COL3
    }
    enum SUBGROUP2 implements GROUPMAIN1 {
        COL3,
        COL4
    }
}
因此,要获取enum,您需要使用
GROUPMAIN1.subb1.COL1

如果您只需要一个字符串常量,也可以通过另一种方式完成:

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

你不可能拥有你所要求的一切。这里有一种方法可以获得一些:

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
中实现一个方法来查找该主组下的所有子组,对于子组和col也是如此。

可能的重复我不完全确定嵌套枚举是什么意思,但即使可能,您不应该这样做。@Silverclaw为什么不呢?我想它看起来像是有一个包含两个元素的主枚举组(GROUP_MAIN1和GROUP_MAIN1)和嵌套枚举,用于SUBGROUP1(“SUBGROUP1”,main.GROUP_MAIN1)这样的子组。我是一个新手,很抱歉问了一个愚蠢的问题:)你的枚举可以有自己是枚举的字段,所以没有什么可以阻止你实现这个。