一.概念
- 枚举是一种独立的类型, 与class类是同级的关系.
- 让某个类型的变量的取值只能为若干个固定值中的一个, 否则编译器会报错.
- 枚举可以让编译器在编译的时候就可以控制程序非法赋值, 使用普通变量的方式在开发过程中无法做到.
- JDK1.5以后, 使用关键字
enum
定义一个新的类型, 称为枚举类型.
二.不使用枚举
/**
* Description: demo
* Create by liangxifeng on 2019-4-14
*/
public class EnumDemo {
public static final int RED = 0x1;
public static final int GREEN = 0x2;
public static final int BLUE = 0x3;
public int color;
@Test
public void test1(){
color = RED;
color = 4;
}
}
- 以上定义的类中有三个常量, 我们使用color变量可以存储三个常量的任意一个值, 但是color同时也可以存储int型的其他值, 我们并不能强制让color变量只允许存储三个常量中的任何一个值, 那么要实验这个效果, 我们就需要用到枚举.
三.使用枚举
- 使用
enum
关键字定义枚举, 实际上相当于定义一个类, 此类继承了 Enum类而已. Enum类中定义了如下三个方法:
image.png
- 先定义
Color
枚举类
package com.soufang.esproject.lxf;
/**
* 定义一个枚举类型
*/
public enum Color {
/**
* 对于枚举类型来说, 以下三个常量代表的是类型为Color的枚举对象.
* RED是Color的一个对象
* GREEN也是Color的一个对象
* BLUE同样也是Color的一个对象.
* 只不过这三个对象是在枚举类的内部事先给定好的, 其他的外面是不能在产生Color枚举类型对象的.
* 也就是说枚举类型对象一定是在枚举类型内部来声明和定义的, 外部是不可以的.
*/
RED, GREEN, BLUE;
}
- 定义Enum使用枚举类型
package com.soufang.esproject.lxf;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.EnumMap;
import java.util.EnumSet;
/**
* Description: demo
* Create by liangxifeng on 2019-4-14
*/
public class EnumDemo {
public static final int RED = 0x1;
public static final int GREEN = 0x2;
public static final int BLUE = 0x3;
public int color;
/**
* 不使用枚举类类型, color可以存储除了以上三个常量之外, 还可以存储其他int类型的数据
*/
@Test
public void test1(){
color = RED;
color = 4;
}
/**
* 定义一个枚举类型的变量, 因为Color是个枚举类型
* 使用枚举类型 colorEnum只能赋值为Color中定义的三个对象.
*/
public Color colorEnum;
@Test
public void test2(){
colorEnum = Color.RED;
//打印名称, 输出: RED
System.out.println(colorEnum.name());
//打印需要, 输出: 0
System.out.println(colorEnum.ordinal());
//打印名称,输出: RED, 与.name()一致
System.out.println(colorEnum.toString());
//打印所属类型, 输出: com.soufang.esproject.lxf.Color
System.out.println(colorEnum.getClass().getName());
//获取枚举中所有值, 输出: [RED, GREEN, BLUE]
Color[] values = Color.values();
System.out.println(Arrays.toString(values));
}
/**
* set 和 map 的枚举类型
*/
@Test
public void test3(){
/**
* 枚举set
* 将Color中定义的所有枚举对象赋值到set集合中, 用来管理枚举元素的集合
*/
EnumSet<Color> set = EnumSet.allOf(Color.class);
for (Color c: set){
System.out.println(c);
}
/**
* 枚举map
* 泛型key要用枚举类型
*/
EnumMap<Color,String> map = new EnumMap<>(Color.class);
map.put(Color.RED,"red");
map.put(Color.GREEN,"green");
map.put(Color.BLUE,"blue");
}
}
四.更多功能请查看
网友评论