在Java中嵌套枚举

前端之家收集整理的这篇文章主要介绍了在Java中嵌套枚举前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想嵌套一些枚举.我所代表的对象是Flags,具有类型和值.有一些离散的类型,每种类型都有一组不同的可能值.

所以如果类型A可以具有值1,2或3,而类型B可以具有值4,5,6,我想要能够做如下事情:

Flag f = Flag.A.1;

f.getType() - returns "A"

f.getValue() - returns "1"

Flag f2 = Flag.A.4; -- Syntax error.

我正在疯狂地尝试在枚举中嵌套枚举 – 我正在尝试的可能性 – 我需要完整的枚举枚举,并用静态成员手工制作一个静态类吗?

我迄今所做的最大努力是:

public class Flag {

    enum A extends Flag {
        ONE("ONE"),TWO("TWO"),THREE("THREE");

        private A(String value) {
            Flag.type = "A";
            Flag.value = value;
        }
    }

        private static String type;
        private static String value;
}

但如果我这样做:

Flag f = Flag.A.ONE;

类型不兼容.

解决方法

你不能有一个数字作为枚举.它必须是一个标识符.

你可以这样做

interface Flag {
    String getType();
    int getValue();
    enum A implements Flag{
        one,two,three;
        String getType() { return getClass().getSimpleName(); }
        int getvalue() { return ordinal()+1; }
    }
    enum B implements Flag{
        four,five,six;
        String getType() { return getClass().getSimpleName(); }
        int getvalue() { return ordinal()+4; }
    }
}

Flag f = Flag.A.one;

然而,更简单的选择可能是

enum Flag {
    A1,A2,A3,B4,B5,B6;
    public String getType() { return name().substring(0,1); }
    public int getValue() { return name().charAt(1) - '0'; }
}

Flag f = Flag.A1;
原文链接:https://www.f2er.com/java/123421.html

猜你在找的Java相关文章