Java枚举基本使用

什么是枚举?能帮我们解决什么问题呢?
枚举有两种方式来实现(日常开发中枚举使用频率较低,了解即可)
     继承 Enum 类
     更改类修饰符为enum
     下面以介绍第二种为例
举个问题栗子:


    public static final Integer RED = 0x1;// 红色
    public static final Integer GREEN = 0x2;// 绿色
    public static final Integer BLUE = 0x3;// 蓝色
    
    public Integer color;// 颜色
    
    @Test
    public void test1() {
    	color = GREEN;
    	color=2;
    	System.out.println(color);
    }

可以看到颜色定义复杂,以及Color颜色可以随意进行赋值
枚举就可以解决这两个问题

  1. 定义Color枚举类型

    public enum Color {
    	/**
    	 * 规定颜色为:
    	 * 		红绿蓝
    	 * 注:
    	 * 	类定义使用enum代替class
    	 * 	枚举类不能被实例化,因为构造访问修饰符是private(默认)
    	 * 	常量使用大写
    	 * 	多个常量使用逗号(,)分割
    	 * 	结尾使用分号(;)结尾
    	 */
    	RED,GREEN,BLUE;
    }

  1. 使用枚举
    public Color colorEnum;
	
    /**
     * 为了规定color的颜色种类只能有红绿蓝三种常量。 
     * 	防止随意赋值。
     * 	一般判断男女,季节等具体信息时使用。
     */
    @Test
    public void test1() {
    	colorEnum = Color.RED;
    	System.out.println("当前颜色:"+colorEnum);
    }
    //输出结果:当前颜色:RED

     2.1 枚举方法的使用(再多方法可以查看Enum来查看具体描述)

	System.out.println("当前常量的名称:"+colorEnum.name());
	System.out.println("当前常量的序号:"+colorEnum.ordinal());
	System.out.println("当前常量转换为String类型:"+colorEnum.toString());
	Color[] values = Color.values();//返回一个枚举数组,显示枚举的所有常量
	String color = Arrays.toString(values);
	System.out.println(color);
	/**
	 * 当前常量的名称:BLUE
	 * 当前常量的序号:2
	 * 当前常量转换为String类型:BLUE
	 * [RED, GREEN, BLUE]
	 */

     解释下序号:
         Java中枚举常量有一个默认值从0开始,序号也可以理解为默认值
         序号顺序是在枚举类中定义时的顺序

     2.2 集合对枚举的支持
            JDK1.5后对于Set和Map而言增加了两个新的子类: EnumSet、EnumMap。
      EnumSet使用
             这里不建议使用实例化因为EnumSet是一个抽象类如果实例化则需要实现其方法,繁琐。
             以下是集合Set的简单使用可以参考官方链接的方法说明:

https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html
	@Test
	public void test2(){
		//将枚举类型填充到EnumSet中,省去实现抽象方法的繁琐。
		EnumSet set=EnumSet.allOf(Color.class);
		System.out.println("allOf:"+set);
		//将指定枚举类型copy到EnumSet中。
		EnumSet copyOf = EnumSet.copyOf(set);
		System.out.println("copyOf:"+copyOf);
		//将枚举类型补充
		copyOf.remove(Color.RED);//移除指定枚举元素
		System.out.println("remove:"+copyOf);
		EnumSet complementOf = EnumSet.complementOf(copyOf);
		System.out.println("complementOf:"+complementOf);
	}

      EnumMap使用
参考链接:
https://docs.oracle.com/javase/8/docs/api/java/util/EnumMap.html

	@Test
	public void test3() {
		// 参数需要传入枚举类
		EnumMap map = new EnumMap<>(Color.class);
		map.put(Color.RED, "red");
		map.put(Color.BLUE, "blue");
		map.put(Color.GREEN, "green");
	}

                                                                              End

你可能感兴趣的:(JavaSE)