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;
}
构造函数用于初始化枚举实例,设置其 code
、name
和 units
属性。
静态方法
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()
: 返回属于该单位类型的具体单位符号列表。
枚举实例
定义了四个枚举实例,分别对应四种不同的单位类型:
WEIGHT (重量单位):
code
: 10name
: “重量单位”units
: 包含 “g”, “kg”, “t”, “mg”, “lb”, “oz”, “斤”, “两” 等常见重量单位符号。
VOLUME (体积单位):
code
: 20name
: “体积单位”units
: 包含 “m³”, “L”, “mL”, “cm³”, “ft³”, “gal-US”, “gal-UK” 等常见体积单位符号。
LENGTH (长度单位):
code
: 30name
: “长度单位”units
: 包含 “m”, “km”, “cm”, “mm”, “μm”, “nm”, “in”, “ft”, “yd”, “mile” 等常见长度单位符号。
AREA (面积单位):
code
: 40name
: “面积单位”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
可以轻松地根据单位类型代码找到对应的枚举实例。 - 每个枚举实例包含了该类型单位的详细信息,如名称和具体的单位符号列表。