Java中Enum枚举类型在项目中应用

1、什么是枚举类型?

1、枚举的本质就是穷举法,将可能会出现的情况,都列举出来,然后在列举的情况中调用。

2、枚举与class类似,也可以定义属性,构造方法,有gettersetter方法。

3、枚举类型对象的值之间比较可以通过==比较,当然也可以通过equals比较。

4枚举类型是线程安全的,只会装载一次。

5、使用枚举类型优化if-else

2、枚举类型基本应用?

2.1、创建基本枚举类

public enum MyColors {
	RED, BLUE, WHITE,GREEN 
}

2.1.1、枚举类型的基本调用

通过枚举打点直接获取

public static void main(String[] args) {
		System.out.println(MyColors.YELLOW);
}

2.1.2、switch中调用枚举

MyColors color = MyColors.RED;  
switch (color) {  
    case RED:   System.out.println("==red==");break;  
    case BLUE:  System.out.println("==yellow==");break;  
    case GREEN: System.out.println("==green==");break;  
}

2.1.3、循环基本枚举类型

public static void main(String[] args) {
	for (MyColors color : MyColors.values()) {
       System.out.println(color.ordinal()+"<==序数  值==>"+color);
    }
}

Java中Enum枚举类型在项目中应用_第1张图片

2.2、在枚举类型中定义方法

通过方法可以为成员属性指定特定的行为,如PARAM_ERROR表示参数错误。

2.2.1、在枚举类型中定义方法

说明1定义了两个参数code和message。

说明2需要给code和message定义set和get方法及有参构造器。

//订单状态枚举类型
public enum OrderStatus{
	PARAM_ERROR(1, "参数错误"),
    CART_EMPTY(2, "购物车为空"),
    ORDER_NOT_EXIST(3, "订单不存在");
	
    private Integer code;
    private String message;
    //构造器
	private OrderStatus(Integer code, String message) {
		this.code = code;
		this.message = message;
	}
	public Integer getCode() {
		return code;
	}
	public void setCode(Integer code) {
		this.code = code;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}   
}

2.2.1、使用带方法的枚举类型

public static void main(String[] args) {		
		System.out.println(OrderStatus.ORDER_NOT_EXIST);
		System.out.println(OrderStatus.ORDER_NOT_EXIST.getCode());
		System.out.println(OrderStatus.ORDER_NOT_EXIST.getMessage());
	}

结果输出:

Java中Enum枚举类型在项目中应用_第2张图片

2.2.3、循环带方法的枚举类

public static void main(String[] args) {
		for (OrderStatus status : OrderStatus.values()) {
            System.out.print("状态值=>"+status.name());
            System.out.print(" 状态序列=>"+status.ordinal());
            System.out.print(" 状态码=>"+status.getCode());
            System.out.println(" 状态信息=>"+status.getMessage());
		}
	}

Java中Enum枚举类型在项目中应用_第3张图片

2.3、在接口中使用枚举类型

有时候在项目中创建的枚举类型可能会非常的多,我们可以使用枚举类型将同类型的枚举类放置在一块进行管理。

2.3.1、在接口中定义枚举类型

//订单枚举类型
public interface OrderEnum {  
	//订单状态枚举类
    enum OrderStatus implements OrderEnum{  
    	    //订单错误,订单成功,订单不存在
        ORDER_ERROR,ORDER_SUCCESS,ORDER_NOT_EXIST;  
    }  
    //订单类型枚举类
    enum OrderType implements OrderEnum{
      	//电子,食品,书籍
    	    ELECTRON,FOOD,BOOKS;
    }  
}

2.4、EnumMap的使用

通过EnumMap可以为枚举的成员属性赋予特定的行为,功能与在枚举类型中定义方法相似。

2.4.1、创建枚举类

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

2.4.2、创建测试类

public static void main(String[] args) {
		//使用
		EnumMap enumMap = new EnumMap<>(MyColors.class);
		enumMap.put(MyColors.RED,"红色");
		enumMap.put(MyColors.BLANK,"黑色");
		enumMap.put(MyColors.GREEN,"绿色");

		String result = enumMap.get(MyColors.RED);
		System.out.println("result==>"+result);
}
输出结果:result==>红色

2.5、EnumSet的使用

EnumSet可以获取当前的枚举中有那些成员属性

2.5.1、创建枚举类

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

2.5.2、创建测试类

//EnumSet导包路径  import java.util.EnumSet;

EnumSet enumSet=EnumSet.allOf(MyColors.class);
		System.out.print(enumSet+"  ");
}
//输出结果:[RED, GREEN, BLANK, YELLOW] 

3、项目使用-枚举优化if-else用法

3.1、使用if-else用法

这种用法的不好之处在于,可读性不高

        String orderStatus="PAYED";
		if(orderStatus.equals("PAYED")){
			System.out.println("====已支付====");
		}else if(orderStatus.equals("SHIPPED")){
			System.out.println("====已发货====");
		}else if(orderStatus.equals("ARRIVED")){
			System.out.println("====已到达====");
		}else if(orderStatus.equals("SIGNEDFOR")){
			System.out.println("====已签收====");
		}else{
			System.out.println("====已取消====");
		}

3.2、优化使用1-创建接口

public interface OrderProcessInterface {
	//通过订单状态,返回不同的结果
	public String orderStatus(String status);
}

3.3、优化使用2-创建枚举类型实现接口

//订单进度
public enum OrderProcessEnum implements OrderProcessInterface{
	/**
	 * PAYED:已支付,SHIPPED:已发货
     * ARRIVED:已到达,SIGNEDFOR:已签收
     * CANCELLATION:已取消
	 */
	PAYED{
		@Override
		public String orderStatus(String status) {
			// TODO Auto-generated method stub
			return "PAYED-已支付";
		}
	},
	SHIPPED{
		@Override
		public String orderStatus(String status) {
			// TODO Auto-generated method stub
			return "PAYED-已签收";
		}
	},
	ARRIVED{
		@Override
		public String orderStatus(String status) {
			// TODO Auto-generated method stub
			return "PAYED-已达到";
		}
	},
	SIGNEDFOR{
		@Override
		public String orderStatus(String status) {
			// TODO Auto-generated method stub
			return "PAYED-已签收";
		}
	},
	CANCELLATION{
		@Override
		public String orderStatus(String status) {
			// TODO Auto-generated method stub
			return "PAYED-已取消";
		}
	}
}

3.4、优化使用3-测试枚举类型

public static void main(String[] args) {
		String orderStatus="PAYED";
		String status = OrderProcessEnum.valueOf(orderStatus).orderStatus(orderStatus);
		System.out.println(status);
}
//返回值: PAYED-已支付

你可能感兴趣的:(JavaAPI应用,java,enum,java枚举类型,枚举优化ifelse)