Java枚举类型

简介: Java枚举类型

1 JDK1.5引入了枚举类

枚举类型的定义包括枚举声明和枚举体。格式如下:

enum  枚举名 {
      枚举体(常量列表)
}

枚举体就是放置一些常量。我们可以写出我们的第一个枚举类型,如示例8-27所示:

2 创建枚举类型

enum Season {    SPRING, SUMMER, AUTUMN, WINDER }

3 枚举底层

    所有的枚举类型隐性地继承自 java.lang.Enum。枚举实质上还是类!而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final修饰的。可以直接通过枚举类型名使用它们。

注:

1. 当你需要定义一组常量时,可以使用枚举类型。

    2. 尽量不要使用枚举的高级特性,事实上高级特性都可以使用普通类来实现,没有必要引入枚举,增加程序的复杂性!

4 枚举的使用

import java.util.Random;
public class TestEnum {
    public static void main(String[] args) {
        // 枚举遍历
        for (Week k : Week.values()) {
            System.out.println(k);
        }
        // switch语句中使用枚举
        int a = new Random().nextInt(4); // 生成0,1,2,3的随机数
        switch (Season.values()[a]) {
        case SPRING:
            System.out.println("春天");
            break;
        case SUMMER:
            System.out.println("夏天");
            break;
        case AUTUMN:
            System.out.println("秋天");
            break;
        case WINDTER:
            System.out.println("冬天");
            break;
        }
    }
}
/**季节*/
enum Season {
    SPRING, SUMMER, AUTUMN, WINDTER
}
/**星期*/
enum Week {
    星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日
}

运行效果:

5 java 中枚举类enum的values()方法的详解

前言:

关于枚举,相信使用的已经很普遍了,现在主要写的是枚举中的一个特殊方法,values(), 为什么说特殊呢,因为在Enum 的 API 文档中也找不到这个方法。接下来就看看具体的使用。


理论上此方法可以将枚举类转变为一个枚举类型的数组,因为枚举中没有下标,我们没有办法通过下标来快速找到需要的枚举类,这时候,转变为数组之后,我们就可以通过数组的下标,来找到我们需要的枚举类。接下来就展示代码了。


首先是我们自己的枚举类。

public enum EnumDemoFirst { 
  RED(1,"hongse"),GREEN(2,"lvse"),YELLOW(3,"huangse"); 
  private int code; 
  private String msg; 
  private EnumDemoFirst(int ordinal, String name) { 
    this.code = ordinal; 
    this.msg = name; 
  } 
  public int getCode() { 
    return code; 
  } 
  public void setCode(int code) { 
    this.code = code; 
  } 
  public String getMsg() { 
    return msg; 
  } 
  public void setMsg(String msg) { 
    this.msg = msg; 
  } 
} 

然后是测试方法,

public class EnumTest { 
  public static void main(String[] args) { 
    EnumDemoFirst[] values = EnumDemoFirst.values(); 
    for (EnumDemoFirst enumDemoFirst : values) { 
      System.out.println(enumDemoFirst + "--" + enumDemoFirst.getCode() + "--" + enumDemoFirst.getMsg()); 
      System.out.println("============="); 
    } 
  } 
} 

此时的输出为,

RED--``1``--hongse ``============= 
GREEN--``2``--lvse ``============= 
YELLOW--``3``--huangse ``=============

这样的话,通过values() 方法就能很方便的使用枚举了。

6 枚举其数组化

orderIdxOperatorDetailDTO.setOrderSource(OrderSource.values()[consumeRecordDoc.getOrderSource()]);

 

7 Java 查看枚举类成员变量个数

虽然 Java 枚举类没有直接为我们提供这个属性,但是我们还是可以间接获取:

Java 枚举类的成员方法 values 可以获取枚举类中的所有变量,并作为数组返回。

此时我们就可以利用数组的长度来得知 Java 枚举类中变量的个数,正好数组的 length 属性记录着这个个数。

所以方法就是 Enum.values().length

8 城市枚举

/**
 * @author oldlu
 * @version 1.0
 * @date 2022/3/23 0023 16:55
 */
public enum ProvinceCode {
    BJ("110000", "北京"),
    TJ("120000", "天津"),
    HB("130000", "河北"),
    SX("140000", "山西"),
    NMG("150000", "内蒙古"),
    LN("210000", "辽宁"),
    DL("210200", "大连"),
    JN("220000", "吉林"),
    HLJ("230000", "黑龙江"),
    SH("310000", "上海"),
    JS("320000", "江苏"),
    ZJ("330000", "浙江"),
    NB("330200", "宁波"),
    AH("340000", "安徽"),
    FJ("350000", "福建"),
    XM("350200", "厦门"),
    HNAN("430000", "湖南"),
    JX("360000", "江西"),
    SD("370000", "山东"),
    QD("370200", "青岛"),
    HN("410000", "河南"),
    HBEI("420000", "湖北"),
    GD("440000", "广东"),
    SZ("440300", "深圳"),
    GX("450000", "广西"),
    HAINANC("460000", "海南"),
    CQ("500000", "重庆"),
    SC("510000", "四川"),
    GZ("520000", "贵州"),
    YN("530000", "云南"),
    XZ("540000", "西藏"),
    AM("820000", "澳门"),
    SXI("610000", "陕西"),
    GU("620000", "甘肃"),
    QH("630000", "青海"),
    NX("640000", "宁夏"),
    XJ("650000", "新疆"),
    TW("710000", "台湾"),
    XG("810000", "香港");
    public final String value;
    public final String text;
    public String getValue() {
        return value;
    }
    public String getText() {
        return text;
    }
    private ProvinceCode(String value, String text) {
        this.value = value;
        this.text = text;
    }
    public static String getText(String value) {
        for (ProvinceCode status : ProvinceCode.values()) {
            if (status.value.equals(value)) {
                return status.text;
            }
        }
        return value;
    }
    public static String getValue(String text) {
        for (ProvinceCode status : ProvinceCode.values()) {
            if (status.text.equals(text)) {
                return status.value;
            }
        }
        return text;
    }
}
目录
相关文章
|
2月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
215 1
Java中的枚举类型详解
Java中的枚举类型详解
Java中的枚举类型详解:应用与最佳实践
Java中的枚举类型详解:应用与最佳实践
|
Java Spring
Java枚举类型与for、Switch语句
Java枚举类型与for、Switch语句
206 0
|
Java Spring
31、学习 Java 中的枚举类型
31、学习 Java 中的枚举类型
224 1
|
Java
Java枚举类型
Java枚举类型
125 0
|
安全 Java
【Java系列】深入解析枚举类型
【Java系列】深入解析枚举类型
241 0
Java的枚举类型
如果类的对象的数量只有有限个,并且可以确定对象的属性,那么考虑使用枚举类。所有的枚举类型都是 Enum 类的子类。它们继承了这个类的许多方法。
190 0
|
Java Spring
第31篇:学习 Java 中的枚举类型
📖 如果一个变量的取值只可能是固定的几个(如:季节),可以考虑使用枚举类型 📖 枚举由一组预定义的常量构成
226 0
第31篇:学习 Java 中的枚举类型