我有一个关于在java类中编写多个枚举的问题。我们可以这样吗?
你能帮我解决一下这个问题吗?
对于Ex:
public final class Test{
public enum Unit{
HORIZONTAL("HORIZONTAL");
}
public enum Code {
COMPANY ("COMPANY");
}
public enum Version{
ONE(1)
}
}
答案 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){}
如需进一步说明,请说明问题。