【问题标题】:Hierarchical enum in JavaJava中的分层枚举
【发布时间】:2016-11-18 12:30:37
【问题描述】:

假设我有这样的结构:

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

enum.GROUP_MAIN1.SUBGROUP1.COL1

将返回值“COL1”

我一直在寻找嵌套枚举,但没有找到解决这种情况的方法。

【问题讨论】:

  • Extending a enum in Java的可能重复
  • 我不是 100% 确定嵌套枚举是什么意思,但即使有可能,你也不应该这样做。
  • @Silverclaw 为什么不呢?
  • 我认为应该有一个包含两个元素 GROUP_MAIN1 和 2 的主枚举以及子组的嵌套枚举,例如 SUBGROUP1("SUBGROUP1", main.GROUP_MAIN1)。对于愚蠢的问题,我是新手抱歉:)
  • 您的枚举可以包含本身就是枚举的字段,因此没有什么能阻止您实现这一点。

标签: java enums hierarchical


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      相关资源
      最近更新 更多