JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java枚举 java枚举类写法

wys521 2024-11-09 15:01:47 精选教程 22 ℃ 0 评论

本期我们讲讲一个名为 EnumUtil 的工具类,它主要用于对 Java 枚举类型的便捷操作。这个工具类提供了一系列方法来处理未知枚举类型的各种需求,使我们能够更方便地进行枚举类型的遍历、查询及映射关系建立。

本文若对您有帮助,请帮我转发、点赞、收藏,您的支持是我最大的动力。

举例说明,定义了一个名为 TestEnum 的枚举类型,包含三个枚举实例,每个实例有一个额外的 key,value 字段。通过 EnumUtil 提供的方法,可以轻易地获取这些枚举实例的名称列表、特定字段的所有值,或基于枚举的一些特性(如Enum中ordinal值,Enum中name值)找到相应的枚举实例及其字段值。

Bash
public enum TestEnum {

  /** 年龄 */
  AGE("age", "10"),
  /** 名称 */
  NAME("name", "cat"),
  /** 性别 */
  SEX("sex", "boy");

  TestEnum(String key, String value) {
    this.key = key;
    this.value = value;
  }

  private final String key;
  private final String value;

  public String getKey() {
    return this.key;
  }

  public String getValue() {
    return this.value;
  }
}

以下是 EnumUtil 类提供的几个关键方法及其功能:

getNames:

? 输入参数:枚举类的Class对象。

? 功能:返回该枚举类中所有枚举对象的名字构成的列表,每个名字是一个字符串。

Bash
/**
 * @desc:getNames -> 获取枚举类中所有枚举对象的name列表
 * @param args:TestEnum.class
 * @Return: void
 *
 * @author: jones
 * @date: 2024/4/8
 */
Console.log("===================== 获取枚举类中所有枚举对象的name列表 =====================");
List<String> names = EnumUtil.getNames(TestEnum.class);
Console.log("names -> " + names);

getFieldValues:

? 输入参数:枚举类的Class对象以及指定的字段名。

? 功能:获取枚举类中每个枚举对象所对应的指定字段的值,并以列表形式返回。

/**
 * @desc:getFieldValues -> 获得枚举类中各枚举对象下指定字段的值
 * @param args:TestEnum.class
 * @Return: void
 *
 * @author: jones
 * @date: 2024/4/8
 */
Console.log("===================== 获取枚举类中所有枚举对象的name列表 =====================");
Console.log("--------------------- 获取枚举类中所有枚举对象的key列表 ---------------------");
List<Object> keys = EnumUtil.getFieldValues(TestEnum.class, "key");
Console.log("keys -> " + keys);
Console.log("--------------------- 获取枚举类中所有枚举对象的value列表 ---------------------");
List<Object> values = EnumUtil.getFieldValues(TestEnum.class, "value");
Console.log("values -> " + values);

getFieldBy:

? 输入参数:两个lambda表达式,第一个用于获取枚举的字段值,第二个同样用于提供匹配枚举的属性值,第三个参数是要匹配的具体值。

? 功能:根据给定的字段提取器和匹配条件,返回对应枚举实例中该字段的值。

/**
 * @desc:getFieldBy -> 根据传入lambda和值获得对应枚举的值
 * @param args:TestEnum.class,TestEnum::getKey,Enum::ordinal,1 【
 *     <p>通过 某字段对应值 获取 枚举中另一字段值,获取不到时为 null
 *     <p>Params:Func1<E, F> field -> 需要的枚举class,Function<E, C> condition -> 枚举条件,C value ->
 *     枚举条件值
 *     <p>对应枚举中另一字段值 ,获取不到时为 null 】
 * @Return: void
 *
 * @author: jones
 * @date: 2024/4/8
 */
Console.log("===================== 获取枚举类中所有枚举对象的name列表 =====================");
Console.log("--------------------- 获取枚举类中key值(一) ---------------------");
String key1 = EnumUtil.getFieldBy(TestEnum::getKey, Enum::ordinal, 1);
Console.log("key1 -> " + key1);

Console.log("--------------------- 获取枚举类中key值(二) ---------------------");
String key2 = EnumUtil.getFieldBy(TestEnum::getKey, Enum::name, "NAME");
Console.log("key2 -> " + key2);

Console.log("--------------------- 获取枚举类value值 ---------------------");
String value = EnumUtil.getFieldBy(TestEnum::getValue, Enum::name, "NAME");

getEnumMap:

? 输入参数:枚举类的Class对象。

? 功能:创建并返回一个有序的Map(LinkedHashMap),其中键是枚举对象的name字符串,值是对应的枚举实例。

/***
 * @desc:getEnumMap -> 获取枚举字符串值和枚举对象的Map对应,使用LinkedHashMap保证有序,结果中键为枚举名,值为枚举对象
 * @param args:TestEnum.class
 * @Return: void
 *
 * @author: jones
 * @date:  2024/4/8
 */
Console.log("===================== 获取枚举字符串值和枚举对象的Map对应 =====================");
Map<String, TestEnum> enumMap1 = EnumUtil.getEnumMap(TestEnum.class);
Console.log("enumMap1 -> " + enumMap1);
enumMap1.forEach(
    (k, v) -> {
      Console.log("--------------------- 获取枚举类对象 ---------------------");
      Console.log("key -> " + k + ", value -> " + v);
      Console.log("--------------------- 获取枚举类key,value值 ---------------------");
      Console.log("key -> " + v.getKey() + ", value -> " + v.getValue());
    });

getNameFieldMap:

? 输入参数:枚举类的Class对象以及指定的字段名。

? 功能:构建一个Map,其中键是枚举名,值是相应枚举对象指定字段的值。

/***
 * @desc:getNameFieldMap -> 获得枚举名对应指定字段值的Map,键为枚举名,值为字段值
 * @param args:TestEnum.class,"key" or "value"
 * @Return: void
 *
 * @author: jones
 * @date:  2024/4/8
 */
Console.log("===================== 获得枚举名对应指定字段值的Map,键为枚举名,值为字段值 =====================");
Map<String, Object> enumMap2 = EnumUtil.getNameFieldMap(TestEnum.class, "key");
Console.log("enumMap2 -> " + enumMap2);
Map<String, Object> enumMap3 = EnumUtil.getNameFieldMap(TestEnum.class, "value");
Console.log("enumMap3 -> " + enumMap3);
enumMap2.forEach(
    (k, v) -> {
      Console.log("--------------------- 获取枚举类key ---------------------");
      Console.log("keyEnum -> " + k + ", value -> " + v);
    });
enumMap3.forEach(
    (k, v) -> {
      Console.log("--------------------- 获取枚举类value ---------------------");
      Console.log("key -> " + k + ", value -> " + v);
    });



通过这些方法,EnumUtil工具类使得枚举类型的操作变得更加灵活和方便,提高了代码的可读性和可维护性。

本文若对您有帮助,请帮我转发、点赞、收藏,您的支持是我最大的动力。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表