java枚举的用法
java枚举的用法
1. 枚举类型的使用
package com.longfor.devops.eagleeye.client.dto;
import lombok.Data;
/**
* @author liuyang
*/
@Data
public class AppStatusDTO {
/**
* app的ID
*/
private String appInstanceId;
/**
* app的状态
*/
private Status status;
/**
* 状态的内容
*/
private String content;
/**
* 时间戳
*/
private Integer timestamp;
// red, yellow, green, unknown代表的就是枚举出来的不同实例,传入的参数, 后面的构造函数中Status(int i)中进行的定义
public enum Status {
/**
* 不健康
*/
red(2),
/**
* 良好
*/
yellow(1),
/**
* 健康
*/
green(0),
/**
* 未知
*/
unknown(-1);
public final int num;
private Status(int i) {
this.num = i;
}
public static Status valueOf(int num){
switch (num){
case 0 : return AppStatusDTO.Status.green;
case 1: return AppStatusDTO.Status.yellow;
case 2: return AppStatusDTO.Status.red;
default:return AppStatusDTO.Status.unknown;
}
}
}
}
2. 枚举类型的使用
package javatest;
import org.junit.Test;
import java.util.EnumMap;
import java.util.EnumSet;
/**
* @ClassName STest
* @Description TODO
* @Author lingxiangxiang
* @Date 11:49 AM
* @Version 1.0
**/
public class STest {
@Test
public void hello() {
AppStatusDTO appStatusDTO = new AppStatusDTO();
// 设置Status的变量
appStatusDTO.setStatus(AppStatusDTO.Status.red);
// 获取Status的具体的值
System.out.println(appStatusDTO.getStatus().num);
// 通过values的方法来遍历所有的枚举类型
for (AppStatusDTO.Status status: AppStatusDTO.Status.values()) {
System.out.println(status.num);
System.out.println(status.toString());
}
// 通过EnumSet来遍历所有的枚举
EnumSet<AppStatusDTO.Status> colors = EnumSet.allOf(AppStatusDTO.Status.class);
for (AppStatusDTO.Status color: colors) {
System.out.println(color);
}
}
}
总结:
- enum 可以定义常量类型, 它被编译期编译为: final class Xxx extends Enums
- name()获取常量定义的字符串常量
- values()获取所有的枚举类型
- 可以为enum类编写构造方法, 字段和方法
- 构造方法申明为private