如何通过名称字符串获取枚举值

时间:2017-05-15 03:16:56

标签: java enums

我想通过名称字符串

获取枚举值

这个枚举代码: 包装实践;

enum Mobile {
  Samsung(400),
  Nokia(250),
  Motorola(325);

  int price;
  Mobile(int p) {
    price = p;
  }
  int showPrice() {
    return price;
  }
}

我可以获取类名和名称字符串

Class enumClass = Class.forName("practice.Mobile");
String name = "Samsung";

如何才能获得三星值400仅使用enumClass和名称? 非常感谢

2 个答案:

答案 0 :(得分:5)

您可以使用以下内容:

final Mobile mobile = Mobile.valueOf("Samsung");
final int price = mobile.showPrice();

(您必须将方法showPrice()的范围更改为public)。

答案 1 :(得分:2)

你可能知道,每个枚举中都有一个valueOf方法,它只是通过解析名称来返回常量(当字符串无效时读取异常。)

现在,由于你的枚举有另外一个与常量相关的字段,你需要通过匹配这些字段来搜索它的值......

这是使用

的可能解决方案

java 8

public enum ProgramOfStudy {
    ComputerScience("CS"), 
    AutomotiveComputerScience("ACS"), 
    BusinessInformatics("BI");

    public final String shortCut;

    ProgramOfStudy(String shortCut) {
        this.shortCut = shortCut;
    }

    public static ProgramOfStudy getByShortCut(String shortCut) {

        return Arrays.stream(ProgramOfStudy.values()).filter(v -> v.shortCut.equals(shortCut)).findAny().orElse(null);
    }
}

所以你可以解决"通过搜索"捷径"

来获取枚举

喜欢

System.out.println(ProgramOfStudy.getByShortCut("CS"));