有一些重复值的枚举?

时间:2016-12-29 11:57:15

标签: java enums

我有一个枚举,它将某些类型组合在一起,并为每种类型保留某些字段。

public enum Types {

A (1, A.class, "stringA" ), 
B (2, B.class, "stringB" ), 
C (3, C.class, "stringC" ),

C1(3, C1.class, "stringC" ),
C2(3, C2.class, "stringC" ),
C3(3, C3.class, "stringC" ),
.
.
D (4, D.class, "stringD" ),
E (5, E.class, "stringE" ),
F (6, F.class, "stringF" ),
.
.
.
.
private int type;
private Class<?> className;
private String longname;

private Types(int type, Class<?> className, String longName ) 
    {
        this.type = type;
        this.className = className;
        this.longName = longName;
    }

//..... getter, setters
// returns name from type passed
   public static Types getName(int type) {

        for (Types e : Types.values()) {
            if (type == e.type)
                return e;
        }

        return null;
    }
}

现在一切都很好,直到类型没有重复的键。因此,TypeC具有子类型C1, C2..,因此具有与3相同的类型值。

它有一个方法getName(),它通过迭代枚举的values来给出类型。

现在C1, C2, C3...都映射到相同的类型值3。

现在要区分C类型,我只有definition个子类型的另一个变量名C。所以definition的值是:

C1 100
C2 101
C3 101

因此,为了检索类型C的枚举的唯一元素,我需要两个值typedefinition

我想过两种方法:

要为名为definition的整个枚举添加新字段,这将导致除C之外的其他类型的空值。

或者为C子类型创建新的枚举,并使用该枚举来获取C子类型名称,而不是getName()

如何以最佳方式实现这一目标?

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这取决于您的Cx枚举是否与AB等同一类。如果不了解您的域名模型,则无法回答这个问题。

仅从语法上,我可能会Types保留definitiontype个字段,definition是主键。然后是两个构造函数,一个包含definitiontype,另一个只有definitiontype被赋予与definition相同的值)。这基本上是您对两个字段的建议,但对于非null而不是Cx,只需将definition视为等于type