如何在类中编写多个枚举类

时间:2015-05-17 00:50:21

标签: java enums

我有一个关于在java类中编写多个枚举的问题。我们可以这样吗?

你能帮我解决一下这个问题吗?

对于Ex:

public final class Test{

    public enum Unit{
        HORIZONTAL("HORIZONTAL");

    }

    public enum Code {
        COMPANY ("COMPANY");
    }

    public enum Version{
        ONE(1)

    }
}

2 个答案:

答案 0 :(得分:6)

Java中的枚举定义是一个类。该语言提供了枚举特有的语法功能,但就JVM而言,枚举是一个类。

实际上,声明了一个枚举:

public enum MyConstants{ ... }

在JVM上实现为:

public static class Enum<MyConstants> { ... }

声明枚举类的规则因此与声明类相同。 .java文件可能只有一个公共类。

因此,您只能在.java文件中声明一个公共枚举。您可以声明任意数量的包私有枚举。

如果你有多个密切相关的枚举,将它们全部声明为封闭类的嵌套成员是没有害处的:

public class MyEnumContainer {

    static enum MyEnum1 { ... }

    static enum MyEnum2 { ... }

    :
    :
}

在这种情况下,您需要导入MyEnclosingClass,或者将常量引用为MyEnclosingClass.MyEnum1.ENUM_ONE。请注意,所有枚举都是静态类,因此使用static关键字不会对您造成惩罚,但这并非必要。

每个成员枚举定义必须独立(即,它必须是完整的枚举定义)。如果你有与常量相关的数据,那么每个枚举定义都需要它自己的实例字段和构造函数。如果你有特定于常量的方法,每个枚举都需要提供方法。

如果您担心大量代码重复,可以将公共代码放入私有静态助手类,然后将方法调用转发给枚举定义中的那些。

使用枚举定义,嵌套枚举应如下所示:

public final class Test{

    public enum Unit {
         HORIZONTAL ("HORIZONTAL"),
         VERTICAL   ("VERTICAL"),
         :
         :
         DIAGONAL   ("DIAGONAL");

         private final String e_name;

         Unit(String name)
             { this.e_name = name; }

         public String getName() { return e_name; }
    }

    public enum Code {
    :
    :
    }

    public enum Version{
    :
    :
    }
}

答案 1 :(得分:4)

你确实可以在类中定义多个枚举,但是你的每个枚举都需要一个构造函数来处理括号中的参数,即

public enum Unit {
    HORIZONTAL("HORIZONTAL"), VERTICAL("VERTICAL");
    private String unit;

    Unit(String unit) {
        this.unit = unit;
    }
}

Version(int versionNumber){}

如需进一步说明,请说明问题。