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