我有一个枚举,它将某些类型组合在一起,并为每种类型保留某些字段。
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的枚举的唯一元素,我需要两个值type
和definition
。
我想过两种方法:
要为名为definition
的整个枚举添加新字段,这将导致除C之外的其他类型的空值。
或者为C子类型创建新的枚举,并使用该枚举来获取C子类型名称,而不是getName()
。
如何以最佳方式实现这一目标?
感谢任何帮助。
答案 0 :(得分:0)
这取决于您的Cx
枚举是否与A
,B
等同一类。如果不了解您的域名模型,则无法回答这个问题。
仅从语法上,我可能会Types
保留definition
和type
个字段,definition
是主键。然后是两个构造函数,一个包含definition
和type
,另一个只有definition
(type
被赋予与definition
相同的值)。这基本上是您对两个字段的建议,但对于非null
而不是Cx
,只需将definition
视为等于type
。