Enum 枚举

678 阅读2分钟
  • Enum 一般用来表示一组相同类型的常量。

如:性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且在比较的时候可以用 ”==” 来替换 equals。

  • 取值是有限的,可以枚举出来的

所有枚举类的父类

public abstract class Enum<E extends Enum<E>>
        implements Comparable<E>, Serializable {

            
 }

常用方法

getDeclaringClass() 方法
name() 和 toString() 
ordinal() 方法 返回的枚举常量的序号
valueOf(String)方法,可以返回字符串对应的枚举值
values方法,返回一个包括所有枚举值的数组

常见用法

常量

定义常量都是: public static fianl….

 可以把相关的常量分组到一个枚举类型里

public enum Color {  
    RED, GREEN, BLANK, YELLOW  
}

swith

switch语句支持int,char,enum类型

enum Signal {  
   GREEN, YELLOW, RED  
}  
public class TrafficLight {  
   Signal color = Signal.RED;  
   public void change() {  
       switch (color) {  
       case RED:  
           color = Signal.GREEN;  
           break;  
       case YELLOW:  
           color = Signal.RED;  
           break;  
       case GREEN:  
           color = Signal.YELLOW;  
           break;  
       }  
   }  
}

枚举中添加方法

public enum Color {  
   RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
   // 成员变量  
   private String name;  
   private int index;  
   // 构造方法  
   private Color(String name, int index) {  
       this.name = name;  
       this.index = index;  
   }  
   // 普通方法  
   public static String getName(int index) {  
       for (Color c : Color.values()) {  
           if (c.getIndex() == index) {  
               return c.name;  
           }  
       }  
       return null;  
   }  
   // get set 方法  
   public String getName() {  
       return name;  
   }  
   public void setName(String name) {  
       this.name = name;  
   }  
   public int getIndex() {  
       return index;  
   }  
   public void setIndex(int index) {  
       this.index = index;  
   }  
}

覆盖枚举的方法

覆盖toString 方法

public enum Color {  
   RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
   // 成员变量  
   private String name;  
   private int index;  
   // 构造方法  
   private Color(String name, int index) {  
       this.name = name;  
       this.index = index;  
   }  
   //覆盖方法  
   @Override  
   public String toString() {  
       return this.index+"_"+this.name;  
   }  
}

实现接口

枚举已默认继承java.lang.enum类,单继承,所有只能实现接口

public interface Behaviour {  
   void print();  
   String getInfo();  
}  
public enum Color implements Behaviour{  
   RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
   // 成员变量  
   private String name;  
   private int index;  
   // 构造方法  
   private Color(String name, int index) {  
       this.name = name;  
       this.index = index;  
   }  
   //接口方法  
   @Override  
   public String getInfo() {  
       return this.name;  
   }  
   //接口方法  
   @Override  
   public void print() {  
       System.out.println(this.index+":"+this.name);  
   }  
}

使用接口组织枚举

public interface Food {  
   enum Coffee implements Food{  
       BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO  
   }  
   enum Dessert implements Food{  
       FRUIT, CAKE, GELATO  
   }  
}

枚举集合

java.util.EnumSet和java.util.EnumMap是两个枚举集合。
EnumSet保证集合中的元素不重复;
EnumMap中的key是enum类型,而value则可以是任意类型。