1、什么是枚举?

 枚举就是要让某个类型的变量的取值只能为若干固定值中的一个,否则编译会报错。枚举可以让编译器在编译时就可以控制

源程序赋给的非法值,使普通变量的方式在开发阶段无法实现这一目标。

2、认识Java中的枚举类

   Java中用enum关键字修饰枚举类,下面定义一个简单的枚举类

/**
 * 枚举类型
 */
public enum Color {
    RED,GREEN,BLUE;
}

类中的RED,GREEN,BLUE就是枚举类型为Color的对象,我们可以通过类名引用它们。

@Test
    public void testEnum1(){
       Color colorEnum=Color.RED;
       System.out.println(colorEnum);//输出枚举对象的名
       System.out.println(colorEnum.name());//枚举对象的名
       System.out.println(colorEnum.compareTo(Color.BLUE));//枚举对象的比较
       System.out.println(colorEnum.ordinal());//枚举的象的序号
       System.out.println(colorEnum.toString());//打印对象名
    }

输出结果:

xlua 枚举 枚举如何使用_xlua 枚举

3、集合对枚举的支持

  在JDK1.5以后,增加了EnumSet,EnumMap集合对枚举进行支持。可以将枚举类中定义的对象封装成集合的形式,但不常用。

@Test
    public void testEnum2(){
        //将枚举中定义的对象封装成集合
        EnumSet<Color> colors=EnumSet.allOf(Color.class);
        //遍历
        for(Color color:colors){
            System.out.println(color);
        }
    }

xlua 枚举 枚举如何使用_System_02

EnumMap<Color,String> colorMap=new EnumMap<Color, String>(Color.class);//转换成Map集合
  colorMap.put(Color.RED,"red");

4、带构造方法的枚举

在枚举中的构造方法必须是private类型的,类中页可以定义属性。

可以在定义枚举对象时,传入属性的值,调用属性的值和一般对象一样(对象名.属性名)。

/**
 * 枚举类型
 */
public enum Color {
    RED(10),GREEN(20),BLUE;

    private int colorValue;
    
    private Color(){}

    private Color(int colorValue) {
        this.colorValue = colorValue;
    }
}

5、枚举实现接口

 与一般类一样,枚举类也可以实现接口。

/**
 * 接口类
 */
public interface Info {
    public int getColor();
}


/**
 * 枚举类型
 */
public enum Color implements Info{
    RED(10),GREEN(20),BLUE;

    private int colorValue;

    private Color(){}

    private Color(int colorValue) {
        this.colorValue = colorValue;
    }

    @Override
    public int getColor() {
        return colorValue;
    }
}

6、枚举类中定义抽象方法

**
 * 枚举类型
 */
public enum Color implements Info{
    RED(10) {
        @Override
        public String getColorValue() {
            return "red";
        }
    },GREEN(20) {
        @Override
        public String getColorValue() {
            return "green";
        }
    },BLUE {
        @Override
        public String getColorValue() {
            return "blue";
        }
    };

    private int colorValue;

    private Color(){}

    private Color(int colorValue) {
        this.colorValue = colorValue;
    }

    @Override
    public int getColor() {
        return colorValue;
    }

    /**
     * 抽象方法
     * @return
     */
    public abstract String getColorValue();
}

7、总结

枚举类具有如下特性:

1)  枚举类是一种特殊形式的 Java 类。

2)  使用 enum 定义的枚举类默认继承了 java.lang.Enum 类

3)  枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

4)  与 Java 中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的。

5)  枚举类的所有实例必须在枚举类中显式列出(, 分隔   ; 结尾). 列出的实例系统会自动添加 public static final 修饰

6)  枚举类也可以实现接口、或继承抽象类。

7)  JDK5 中扩展了 swith 语句,它除了可以接收 int, byte, char, short 外,还可以接收一个枚举类型。