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

Sud*_*eer 4 java enums

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

你能帮我解决一下如何完成这个吗?

对于Ex:

public final class Test{

    public enum Unit{
        HORIZONTAL("HORIZONTAL");

    }

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

    public enum Version{
        ONE(1)

    }
}
Run Code Online (Sandbox Code Playgroud)

Daw*_*ski 6

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

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

    Unit(String unit) {
        this.unit = unit;
    }
}
Run Code Online (Sandbox Code Playgroud)

或者

Version(int versionNumber){}
Run Code Online (Sandbox Code Playgroud)

如需进一步解释,请指明问题。


sco*_*ttb 6

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

实际上,声明的枚举:

public enum MyConstants{ ... }
Run Code Online (Sandbox Code Playgroud)

在JVM上实现为:

public static class Enum<MyConstants> { ... }
Run Code Online (Sandbox Code Playgroud)

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

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

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

public class MyEnumContainer {

    static enum MyEnum1 { ... }

    static enum MyEnum2 { ... }

    :
    :
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您需要导入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{
    :
    :
    }
}
Run Code Online (Sandbox Code Playgroud)