枚举Enum的使用

Java5开始引入枚举ENUM。
通常有下面七种情况。

表示常量的组合

1
2
3
enum Signal {//信号灯
    GREEN, YELLOW, RED
}

Enum可以在switch语句中使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
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 ;
        ;
    ;
}

Enum内部可以加自己的方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public enum Color{
    RED("红色",1),
    GREEN("绿色",2),
    BLANK("白色",3),
    YELLOW("黄色",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 ;
    ;
    public static Color getColor(int index){
        for (Color c : Color.values()) {
            if(c.getIndex() == index) {
                    return c;
            }
        ;
        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;
    ;
}

可以重写Enum的toString()方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
public enum Color {
    RED("红色",1),
    GREEN("绿色",2),
    BLANK("白色",3),
    YELLOW("黄色",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;  
    }
}

实现接口

enum是以java.lang.enum类为基类的。不能继承别的类,但可以实现接口

  • 定义一个接口Behaviour

    1
    2
    3
    4
        public  interface Behaviour {
            void print();  
            String getInfo();  
        }
    
  • 实现Behaviour

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public  enum Color implements Behaviour{
        RED("赤色" , 1 ),
        GREEN( "青色" , 2 ),
        BLANK( "白色" , 3 ),
        YELLOW( "黄色" , 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);  
        }
    }
    

enum可以作为接口的成员

1
2
3
4
5
6
7
8
public interface Food {
    enum Coffee implements Food{
        BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO;
    }
    enum Dessert implements Food{
        FRUIT, CAKE, GELATO;
    }
}

enum的Collection的使用

  • 有2种enum的Collection:java.util.EnumSet和java.util.EnumMap
  • EnumSet内任意一个成员都不可重复。
  • EnumMap的key为enum类型,但value可以是任意类型
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import java.util.EnumSet;
import java.util.Iterator;

public class Main {

    public static void main(String[] args) {
        EnumSet largeSize = EnumSet.of(Size.XL,Size.XXL,Size.XXXL);
        for(Iterator it = largeSize.iterator();it.hasNext();){
            Size size = (Size)it.next();
            System.out.println(size);
        }
    }
}

enum Size {
  S, M, L, XL, XXL, XXXL;
}