枚举

Enum

  • 定义:

​ enum是1.5出现的一种类的表现规范,本质上还是一种类,编译器会生成一个类继承自java.lang.Enum

  • 特点:

    1. 因为它的属性是final的,因此一般是大写,由于这种特性,它可以用来处理一些固定的数据
    2. 也可以用来做单例
    3. 创建的资源消耗小于类
    4. 可用于switch(enum)
    5. 它的父类public abstract class Enum<E extends Enum> implements Comparable,
      Serializable。因此它也有int compareTo(T)方法,放在有序集合中是自然排序,等还有其他父类的特性
    6. 不能继承其他的enum,因为编译器会把enum加上final,所以不能继承,也不能继承其他类,因为本身就继承了java.lang.Enum
    7. 如果你要定义自己的方法需要先定义enum的实例,最后加上‘;’,然后才可以定义方法
    8. 可以实现多个接口,不能继承
    9. 实现接口不能写不能写@override
  • api:
    enums values() 返回enum数组,是编译器插入到enum中的,所以当你向上转型时是不能用这个方法的,要用(是Class上的方法)enum.getClass().getEnumConstants()

    enum Search { HITHER, YON }
    
    public class UpcastEnum {
      public static void main(String[] args) {
        Search[] vals = Search.values();
        Enum e = Search.HITHER; // Upcast
        // e.values(); // No values() in Enum
        for(Enum en : e.getClass().getEnumConstants()) {
          System.out.println(en);
        }
      }
    } /* Output:
    HITHER
    YON
    *///:~
    

    ​ int ordinal() 返回它的enum排序index

switch

public enum  Enum01 {
    LEFT, RIGHT

}

class EnumTest03 {
    Enum01 enum01;

    public EnumTest03(Enum01 enum01) {
        this.enum01 = enum01;
    }

    public static void main(String[] args) {
        EnumTest03 enumTest03L = new EnumTest03(Enum01.LEFT);
        EnumTest03 enumTest03R = new EnumTest03(Enum01.RIGHT);
        enumTest03L.description();
        enumTest03R.description();
    }

    void description() {
        switch (enum01) {
            case LEFT:
                System.out.println(enum01);
                break;
            case RIGHT:
                System.out.println(enum01);
                break;
            default:
                System.out.println("没有这个值");
                break;
        }
    }
}



enum例子

public enum ResponseEnum implements Cloneable, Serializable {
    SUCCESS(200, "成功"),
    FAIL(500, "失败");

    private final String str;
    private final int status;

    private ResponseEnum(int status, String str) {
        this.status = status;
        this.str = str;
    }

    public String getStr() {
        return str;
    }

    public int getStatus() {
        return status;
    }
}

class Test {
    public static void main(String[] args){
        System.out.println(ResponseEnum.SUCCESS);
        System.out.println(ResponseEnum.FAIL);
    }
}
/**out:
SUCCESS
FAIL
*/
原文地址:https://www.cnblogs.com/zpyu521/p/11747949.html