【问题标题】:What is a Java enum? [closed]什么是 Java 枚举? [关闭]
【发布时间】:2013-10-12 17:03:18
【问题描述】:

所以我不太明白枚举是什么,它是否像一个数组,可以包含所有不同的数据类型,并且还可以在其中包含其他类似对象的数组?很抱歉,如果这不是一个好的格式,但这是获得答案的唯一合适的 plkace。

【问题讨论】:

  • 您可能可以在其他地方找到帮助。您阅读了哪些具体的文档,文档的哪些具体部分需要帮助?
  • 我建议你再读一遍Java教程。
  • Why and what for: java enum 的可能重复项
  • 理解枚举的简单方法是看它的内部。您可以使用javap -c YourEnumClass 来完成。这样,您将看到每个枚举都是扩展 java.lang.Enum 的类,并且具有带有此类实例的静态最终字段(它们是枚举值)。只有编译器创建的其他东西是方法:ordinalvalues

标签: java enums


【解决方案1】:

Java 枚举类似于类,但主要用于常量。它使用构造函数,就像类一样。我认为了解枚举如何工作的一个好方法是看一个例子。这是我前一段时间学习时自己写的一个小例子。

    public class UseEnum {  
public enum Colors {
    RED("red", 1), BLUE("blue", 2), GREEN("green", 3), 
    YELLOW("yellow", 4), ORANGE("orange", 5), PURPLE("purple", 6), 
    PINK("pink", 7), WHITE("white", 8), BLACK("black", 9);
    private String color = "";
    private int id;
    private Colors(String color, int id) {
        this.color = color;
        this.id = id;
    }       
    private String getColor() {
        return color;
    }       
    private int getId() {
        return id;
    }
}
public static void main(String[] args) {
    while(true){    //infinite loop
        UseEnum ue = new UseEnum();
        ue.findColor(option);
    }
}
private static int option;  
private UseEnum() {
    try{
        Scanner s = new Scanner(System.in);
        System.out.print("Enter an ID: ");
        option = s.nextInt();
    }catch(Exception e){
        System.out.println("\terror: invalid number");
        System.exit(1);
    }
}   
private void findColor(int id) {
    boolean found = false;
    if(id == 10)
        System.exit(0);
    for(Colors c : Colors.values()) {
        if(c.getId() == id) {
            System.out.println("\t"+c.getColor());
            found = true;
            break;
        }
    }
    if(found != true)
        System.out.println("\tinvalid");
}

}

枚举可以用在 switch 语句中,这使得它们非常有用。

我推荐这篇文章进一步阅读:javarevisited

【讨论】:

    【解决方案2】:

    用文件名EnumDay.java创建枚举

    public enum EnumDay {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY,NAVEED
    }
    

    和文件名为EnumTest.java的测试类

     public class EnumTest {
    EnumDay day;
    
    public EnumTest(EnumDay day) {
        this.day = day;
    }
    
    public void tellItLikeItIs() {
        switch (day) {
        case MONDAY:
            System.out.println("Mondays are bad.");
            break;
    
        case FRIDAY:
            System.out.println("Fridays are better.");
            break;
    
        case SATURDAY:
        case SUNDAY:
            System.out.println("Weekends are best.");
            break;
    
        case NAVEED:
            System.out.println(day + " is best.");
            break;
    
        default:
            System.out.println("Midweek days are so-so.");
            break;
        }
    }
    
    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(EnumDay.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(EnumDay.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(EnumDay.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay = new EnumTest(EnumDay.SATURDAY);
        sixthDay.tellItLikeItIs();
        EnumTest seventhDay = new EnumTest(EnumDay.SUNDAY);
        seventhDay.tellItLikeItIs();
        EnumTest eigththDay = new EnumTest(EnumDay.NAVEED);
        eigththDay.tellItLikeItIs();
    }
    }
    

    【讨论】:

      【解决方案3】:

      在此处引用官方 Java 文档本身:

      枚举类型是一种特殊的数据类型,它使变量能够成为一组预定义的常量。该变量必须等于为其预定义的值之一。常见示例包括指南针方向(NORTH、SOUTH、EAST 和 WEST 的值)和星期几。

      http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-07
        • 1970-01-01
        相关资源
        最近更新 更多