枚举类高级用法

发布于:2025-07-20 ⋅ 阅读:(21) ⋅ 点赞:(0)
package com.midea.logistics.idata.domain.enums;

import java.util.Arrays;
import java.util.List;

public enum UnitTypeEnum {
    WEIGHT(10, "重量单位", Arrays.asList("g", "kg", "t", "mg", "lb", "oz", "斤", "两")),
    VOLUME(20, "体积单位", Arrays.asList("m³", "L", "mL", "cm³", "ft³", "gal-US", "gal-UK")),
    LENGTH(30, "长度单位", Arrays.asList("m", "km", "cm", "mm", "μm", "nm", "in", "ft", "yd", "mile")),
    AREA(40, "面积单位", Arrays.asList("m²", "km²", "ha", "cm²", "ft²", "亩"));

    private final int code;
    private final String name;
    private final List<String> units;

    UnitTypeEnum(int code, String name, List<String> units) {
        this.code = code;
        this.name = name;
        this.units = units;
    }

    public static UnitTypeEnum fromCode(int code) {
        return Arrays.stream(values())
                .filter(t -> t.code == code)
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException(IdataErrorCodeEnum.DATA_BASE_UNIT_TYPE_UNSUPPORTED.getMsg()));
    }

    // Getter 方法
    public int getCode() { return code; }
    public String getName() { return name; }
    public List<String> getUnits() { return units; }
}

这段代码定义了一个名为 UnitTypeEnum 的 Java 枚举类,用于表示不同类型的单位及其对应的符号。它提供了对重量、体积、长度和面积单位的支持,并且允许通过单位类型代码来获取对应的枚举实例。

类概述

  • 包名: com.midea.logistics.idata.domain.enums
  • 功能: 定义了四种基本的单位类型(重量、体积、长度、面积),每种类型包含一个或多个具体的单位符号。
  • 异常处理: 如果尝试使用无效的单位类型代码获取枚举实例,则会抛出 IllegalArgumentException 异常。

成员变量

每个枚举实例包含三个成员变量:

  • code: 整型值,代表该单位类型的唯一标识符。
  • name: 字符串,描述该单位类型的名称。
  • units: 字符串列表,包含属于该单位类型的所有具体单位符号。

构造函数

UnitTypeEnum(int code, String name, List<String> units) {
    this.code = code;
    this.name = name;
    this.units = units;
}

构造函数用于初始化枚举实例,设置其 codenameunits 属性。

静态方法

fromCode(int code)
public static UnitTypeEnum fromCode(int code) {
    return Arrays.stream(values())
            .filter(t -> t.code == code)
            .findFirst()
            .orElseThrow(() -> new IllegalArgumentException(IdataErrorCodeEnum.DATA_BASE_UNIT_TYPE_UNSUPPORTED.getMsg()));
}

此方法接受一个整数参数 code,并返回与之匹配的 UnitTypeEnum 实例。如果找不到匹配的枚举实例,则抛出 IllegalArgumentException 异常,提示不支持的单位类型。

Getter 方法

为每个成员变量提供相应的 getter 方法,以便外部可以访问这些私有成员变量。

  • getCode(): 返回单位类型的代码。
  • getName(): 返回单位类型的名称。
  • getUnits(): 返回属于该单位类型的具体单位符号列表。

枚举实例

定义了四个枚举实例,分别对应四种不同的单位类型:

  1. WEIGHT (重量单位):

    • code: 10
    • name: “重量单位”
    • units: 包含 “g”, “kg”, “t”, “mg”, “lb”, “oz”, “斤”, “两” 等常见重量单位符号。
  2. VOLUME (体积单位):

    • code: 20
    • name: “体积单位”
    • units: 包含 “m³”, “L”, “mL”, “cm³”, “ft³”, “gal-US”, “gal-UK” 等常见体积单位符号。
  3. LENGTH (长度单位):

    • code: 30
    • name: “长度单位”
    • units: 包含 “m”, “km”, “cm”, “mm”, “μm”, “nm”, “in”, “ft”, “yd”, “mile” 等常见长度单位符号。
  4. AREA (面积单位):

    • code: 40
    • name: “面积单位”
    • units: 包含 “m²”, “km²”, “ha”, “cm²”, “ft²”, “亩” 等常见面积单位符号。

示例用法

假设你需要根据单位类型代码 20 获取对应的体积单位类型及所有相关单位符号,你可以这样做:

UnitTypeEnum volumeType = UnitTypeEnum.fromCode(20);
System.out.println("单位类型名称: " + volumeType.getName());
System.out.println("单位类型下的所有单位符号: " + volumeType.getUnits());

这将输出:

单位类型名称: 体积单位
单位类型下的所有单位符号: [m³, L, mL, cm³, ft³, gal-US, gal-UK]

如果传入一个不存在的代码,比如 50,则会抛出异常:

UnitTypeEnum unknownType = UnitTypeEnum.fromCode(50); // 抛出 IllegalArgumentException

总结

  • UnitTypeEnum 提供了一种方便的方式来管理和查询不同类型的单位及其符号。
  • 通过静态方法 fromCode 可以轻松地根据单位类型代码找到对应的枚举实例。
  • 每个枚举实例包含了该类型单位的详细信息,如名称和具体的单位符号列表。

网站公告

今日签到

点亮在社区的每一天
去签到