java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java"枚举的枚举"表示二级分类的业务场景

Java如何通过"枚举的枚举"表示二级分类的业务场景

作者:编程经验分享

这篇文章主要介绍了Java如何通过"枚举的枚举"表示二级分类的业务场景问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题

一般在开发中,会使用枚举类穷举特定的业务字段值。

比如用枚举类来表示业务中的类型,不同的类型对应的不同的业务逻辑。

但是如果一个类型下会有不同多个的子类型,这时候一个枚举类就不能够完全表示这个业务逻辑了。

如何解决

在 Java编程思想 这本书的枚举章节中,有一段 枚举的枚举 代码示例,就能够很好的表示上面问题的业务场景。

代码

业务场景

4 张业务数据表 A B C D,按资源类型来分类,其中 A B 表属于农用地资源,C D 表属于森林资源。

一级资源类型枚举类

public enum Resource {

    FARM(0, "农用地", Table.Farm.class),
    FOREST(1, "森林", Table.Forest.class);

    static {
        typeMap = Stream.of(values()).
                collect(Collectors.toMap(e -> e.getValue(), e -> e));
    }
    private static final Map<Integer, Resource> typeMap;
    private final int value;
    private final String desc;
    private final Table[] tables;

    Resource(int value, String desc, Class<? extends Table> kind) {
        this.value = value;
        this.desc = desc;
        this.tables = kind.getEnumConstants();
    }

    public int getValue() {
        return value;
    }

    public String getDesc() {
        return desc;
    }

    public Table[] getTables() {
        return tables;
    }

    public static Resource getEnum(int value) {
        return typeMap.get(value);
    }

}

二级资源类型枚举类

public interface Table {
    enum Farm implements Table {
        TABLE_A("TABLE_A"),
        TABLE_B("TABLE_B");

        private final String tableName;

        Farm(String tableName) {
            this.tableName = tableName;
        }

        public String getTableName() {
            return tableName;
        }
    }
    enum Forest implements Table {
        TABLE_C("TABLE_C"),
        TABLE_D("TABLE_D");

        private final String tableName;

        Forest(String tableName) {
            this.tableName = tableName;
        }

        public String getTableName() {
            return tableName;
        }
    }

    String getTableName();
}

测试

public class Test {

    public static void main(String[] args) {
        for (Table table : Resource.getEnum(0).getTables()) {
            System.out.println(table.getTableName());
        }

        for (Table table : Resource.getEnum(1).getTables()) {
            System.out.println(table.getTableName());
        }
    }

}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文