枚举的概念与使用方法

本文探讨了Java中枚举的使用,比较了枚举与public final static定义常量的区别。枚举虽然不能直接定义具体值,但可以通过构造函数和覆写toString方法进行扩展。由于枚举实现了Comparable接口,因此枚举类型可以自动排序。此外,文章还展示了如何通过数字获取对应的枚举值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

枚举的概念与使用方法

为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?
这是枚举中定义常量的方法:

enum EnumTest {
	//这些都是枚举EnumTest 的对象
    MON, TUE, WED, THU, FRI, SAT, SUN;
}
//遍历所有的枚举常量
public class demo1 {
    public static void main(String[] args) {
   		 //返回具有指定名称的指定枚举类型的枚举常量。
		System.out.println(EnumTest.valueOf("MON"));
        for(EnumTest EnumTest : EnumTest.values()){
            System.out.println(EnumTest);
        }
    }
}

这是通常定义常量的方法:

class EnumTest{
    public final static String MON = "星期一";
    public final static String TUE = "星期二";
    public final static String WED = "星期三";
    public final static String THU = "星期四";
    public final static String FRI = "星期五";
    public final static String SAT = "星期六";
    public final static String SUN = "星期日";
}

能看出枚举不能直接定义具体的值,但是枚举类型提供了构造函数,我们可以通过构造函数和覆写toString 方法来实现

enum EnumTest {
    MON("星期一",1),
    TUE("星期二",2),
    WED("星期三",3),
    THU("星期四",4),
    FRI("星期五",5),
    SAT("星期六",6),
    SUN("星期日",7);
    private String description;
    private int id;

    EnumTest(String description, int id) {    
    //很容易理解我们这里需要什么数据类型就生成相应参数的构造方法
        this.description = description;
        this.id = id;
    }

    @Override
    public String toString() {
        return "EnumTest{" +
                "description='" + description + '\'' +
                ", id=" + id +
                '}';
    }
}
public class demo1 {
    public static void main(String[] args) {
        for(EnumTest EnumTest : EnumTest.values()){
            System.out.println(EnumTest.toString());
        }
    }
}

通过查看文档了解到enum 实现了comparable借口所以枚举类型本身是可以排序的通过代码来了解一下:
在这里插入图片描述

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

enum EnumTest{
    MON,TUE,WED;
}
public class demo1 {
    public static void main(String[] args) {
        Set<EnumTest> set = new TreeSet<EnumTest>();
        set.add(EnumTest.MON);
        set.add(EnumTest.WED);
        set.add(EnumTest.TUE);
        Iterator iterator = set.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

通过结果我们可以看出set集合自动排序了

package com.utcip.crm.common.constants;  
  
import com.utcip.crm.common.base.process.ScheduleStatusEnum;  
  
/** 
 * 合同变更存储mongodb 状态值 
 * @author jingfangnan 
 * 
 */  
public enum ConstractMongoStatus {  
      
    NEW(3,"新增"),  
      
    UPDATE(2,"修改"),  
      
    DELETE(1,"删除"),  
      
    GENERATOR(0,"普通无状态"),  
      
    // 是否提交审核  
    REVIEW(5,"提交审核"),  
      
    NO_REVIEW(-5,"不提交审核"),  
      
    //变更流程相关  
      
    ONLY_CONTRACT_MATERIAL(6,"仅涉及合同材料修改"),  
      
    NOT_ONLY_CONTRACT_MATERIAL(7,"需要合同档案部审核"),  
      
    CRM_ACC_EXPEN_CHANGE(8,"涉及实收款变更"),  
      
    NO_CRM_ACC_EXPEN_CHANGE(9,"不涉及实收款变更"),  
      
    //历史版本列表  
      
    UPDATE_PRODUCT(10,"变更商品"),  
      
    UPDATE_ACC_EXPEN(11,"变更实收款"),  
      
    UPDATE_RECEIVAL(20,"变更收款计划"),  
      
    UPDATE_ATTACHMENT(12,"变更附件"),  
      
    UPDATE_CONTRACT(13,"变更合同基本信息"),  
      
    UPDATE_APPROVAL(14,"变更审批单"),  
      
    //变更历史状态描述  
      
    MODIFY_NOMORE(19,"初始状态"),  
      
    MODIFY_UPDATE(15,"已更新"),  
      
    MODIFY_REVIEW_ING(16,"审核中"),  
      
    MODIFY_REVIEW_PASS(17,"审核通过"),  
      
    MODIFY_REVIEW_NO_PASS(18,"审核未通过")  
      
    ;  
      
    private final Integer status;  
      
    private final String desc;  
      
    private ConstractMongoStatus(final Integer status,final String desc){  
        this.status = status;  
        this.desc = desc;  
    }  
      
    public static Integer getValue(Integer value) {  
        ConstractMongoStatus[] businessModeEnums = values();  
        for (ConstractMongoStatus businessModeEnum : businessModeEnums) {  
            if (businessModeEnum.status().equals(value)) {  
                return businessModeEnum.status();  
            }  
        }  
        return null;  
    }   
      
    public static String getDesc(Integer value) {  
        ConstractMongoStatus[] businessModeEnums = values();  
        for (ConstractMongoStatus businessModeEnum : businessModeEnums) {  
            if (businessModeEnum.status().equals(value)) {  
                return businessModeEnum.desc();  
            }  
        }  
        return null;  
    }  
      
    public Integer status(){  
        return this.status;  
    }  
      
    public String desc(){  
        return this.desc;  
    }  
      
}

通过传入的数字获得对应的值:

public enum  EnumRole {

    FATHER(1,"爸爸"),
    MOTHER(2,"妈妈"),
    GRANDPA(3,"爷爷"),
    GRANDMA(4,"奶奶"),
    GRANDFATHER(5,"姥爷"),
    GRANDMOTHER(6,"姥姥"),;
    private final int id;
    private final  String description;

    EnumRole(int id, String description) {
        this.id = id;
        this.description = description;
    }

    public int getId() {
        return id;
    }

    public String getDescription() {
        return description;
    }

    public static String getValue(int value) {
     	// values 表示得到全部的枚举内容 是编译器自动生成的方法,Enum中并没有该方法,返回包括所有枚举变量的数组。
        for (EnumRole RoleType : EnumRole.values()) {
            if (value == RoleType.getId()) {
                return RoleType.getDescription();
            }
        }
        return null;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值