21xrx.com
2024-09-19 10:08:58 Thursday
登录
文章检索 我的文章 写文章
如何在Java枚举类中根据key获取value
2023-06-15 09:11:01 深夜i     --     --
Java枚举类 根据key获取value switch-case语句 Map集合

在Java中,枚举类型是一种特殊的类。它由一组固定的常量值组成,并且这些常量值是不能被修改的。在实际的开发过程中,我们经常需要根据key获取value,用于展示或保存数据等。本文将介绍如何在Java枚举类中根据key获取对应的value。

首先,我们需要在枚举类中定义一个方法,用于返回指定key对应的value。方法的实现可以采用switch-case语句或者Map集合。如果我们只需要在枚举类中根据key获取value,可以采用switch-case语句,如下:


public enum Weekday {

  MONDAY("星期一"),

  TUESDAY("星期二"),

  WEDNESDAY("星期三"),

  THURSDAY("星期四"),

  FRIDAY("星期五"),

  SATURDAY("星期六"),

  SUNDAY("星期日");

  private String description;

  Weekday(String description)

    this.description = description;

  

  public String getDescription()

    return description;

  

  public static String getValue(String key) {

    for (Weekday weekday : values()) {

      if (weekday.name().equals(key)) {

        return weekday.getDescription();

      }

    }

    return null;

  }

}

在上面的代码中,我们定义了一个名为getValue的静态方法,它接收一个字符串类型的key值,并返回对应的value。我们使用for-each循环来遍历枚举类中的所有常量值,通过name()方法获取常量名称,并与指定的key进行比较,如果相等,则返回该常量对应的description值。

如果我们需要在多个枚举类中都使用该方法来获取value,可以使用Map集合来实现。首先,我们需要在每个枚举类中定义一个名为valueMap的属性,它的类型为Map。


public enum Status {

  SUCCESS(200, "成功"),

  ERROR(500, "错误");

  private int code;

  private String description;

  Status(int code, String description)

    this.code = code;

    this.description = description;

  

  public int getCode()

    return code;

  

  public String getDescription()

    return description;

  

  private static Map valueMap = new HashMap<>();

  static {

    for (Status status : values()) {

      valueMap.put(status.getCode(), status.getDescription());

    }

  }

  public static String getValue(int key) {

    return valueMap.get(key);

  }

}

在上面的代码中,我们定义了一个名为valueMap的静态属性,并使用静态代码块来初始化该属性。静态代码块在类加载时会被执行,这样我们就可以遍历该枚举类中的所有常量值,将它们的code和description存入valueMap中。在getValue方法中,我们直接使用valueMap.get(key)来获取对应的value值。

总之,在Java枚举类中根据key获取value有多种实现方式。如果只需要在单个枚举类中获取value,可以采用switch-case语句;如果在多个枚举类中都需要使用该方法,可以使用Map集合来实现。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章