Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用一些重复值的枚举?_Java_Enums - Fatal编程技术网

Java 使用一些重复值的枚举?

Java 使用一些重复值的枚举?,java,enums,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, "str

我有一个枚举,它将某些类型保存在一起,并为每个类型保存某些字段

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;
    }
}
因此,要为类型C检索枚举的唯一元素,我需要两个值
type
definition

我认为有两种方法:

或者为名为
定义的整个枚举添加一个新字段,因此这将导致除C之外的其他类型为空值

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

如何以最好的方式实现这一点


感谢您的帮助。

这取决于您的
Cx
枚举是否真的与
A
B
等属于同一类。如果您不知道域模型,则无法回答此问题


就语法而言,我可能会使
类型
保留
定义
类型
字段,
定义
是主键。然后,两个构造函数,一个同时具有
定义
类型
,另一个仅具有
定义
类型
将被分配与
定义
相同的值)。这基本上是你建议的两个字段,而不是<代码> null <代码>非<代码> CX<代码>只考虑<代码>定义< /C> >等于代码>类型< /代码> .< /P>我建议你用定义字段替换类型字段,让A有100,B有200,等等,因为你可能想要A1,A2,G7,Z9-嗯,不是真的,但是为了扩展性,除非您升级一个广泛使用的库,否则完全用定义替换类型总是更好的。我建议您重命名方法“Types getName(int type)”。你能添加一些javadoc吗,这样我们就可以理解这个方法应该做什么了?是不是类似于“类型getByTypeKey(int-typeKey)”?@TobiSotto:是的,它是
getByTypeKey(int-typeKey)
。1-->A型、2-->B型、3-->C型A、B、C、D是不同的类型,C1、C2。。属于类型C。并且
定义
属性仅适用于类型
Cx
,因此不能为类型分配与定义相同的值。你能举例说明两个构造函数是如何工作的吗?
C1 100
C2 101
C3 101