枚举类高级用法

java 复制代码
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: 字符串列表,包含属于该单位类型的所有具体单位符号。

构造函数

java 复制代码
UnitTypeEnum(int code, String name, List<String> units) {
    this.code = code;
    this.name = name;
    this.units = units;
}

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

静态方法

fromCode(int code)
java 复制代码
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 获取对应的体积单位类型及所有相关单位符号,你可以这样做:

java 复制代码
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,则会抛出异常:

java 复制代码
UnitTypeEnum unknownType = UnitTypeEnum.fromCode(50); // 抛出 IllegalArgumentException

总结

  • UnitTypeEnum 提供了一种方便的方式来管理和查询不同类型的单位及其符号。
  • 通过静态方法 fromCode 可以轻松地根据单位类型代码找到对应的枚举实例。
  • 每个枚举实例包含了该类型单位的详细信息,如名称和具体的单位符号列表。
相关推荐
学亮编程手记4 分钟前
K8S v1.33 版本主要新特性介绍
java·容器·kubernetes
Haven-1 小时前
Java-面试八股文-JVM篇
java·jvm·面试
我真的是大笨蛋1 小时前
JVM调优总结
java·jvm·数据库·redis·缓存·性能优化·系统架构
wjs0401 小时前
Git常用的命令
java·git·gitlab
superlls2 小时前
(算法 哈希表)【LeetCode 349】两个数组的交集 思路笔记自留
java·数据结构·算法
honder试试2 小时前
焊接自动化测试平台图像处理分析-模型训练推理
开发语言·python
^Rocky2 小时前
JavaScript性能优化实战
开发语言·javascript·性能优化
田里的水稻2 小时前
C++_队列编码实例,从末端添加对象,同时把头部的对象剔除掉,中的队列长度为设置长度NUM_OBJ
java·c++·算法
ponnylv2 小时前
深入剖析Spring Boot启动流程
java·开发语言·spring boot·spring
萧邀人3 小时前
第一课、Cocos Creator 3.8 安装与配置
开发语言