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
posted @ 2019-05-31 20:32  阿晶  阅读(4639)  评论(0编辑  收藏  举报