【问题标题】:how can I get enum value by name string如何通过名称字符串获取枚举值
【发布时间】:2017-05-15 03:16:55
【问题描述】:

我想通过名称字符串获取枚举值,

这是枚举代码: 打包练习;

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";

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

【问题讨论】:

  • 你的意思是像Enum.valueOf(String)吗?例如Mobile.valueOf("Nokia")
  • 不相关: 标准命名约定是将该方法命名为getPrice(),而不是showPrice(),尤其是因为该方法实际上并没有显示 i> 任何东西。
  • @Edwin yes, Enum,valueOf(enumClass, name),我们可以通过这种类型的方法得到name对应值400吗?

标签: java enums


【解决方案1】:

你可以使用类似的东西:

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

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

【讨论】:

  • 为什么是最终关键词?不是必需的,并且确实为示例添加了零值。
  • @Gabe 使用变量 enumClass 怎么样?不是移动的。
【解决方案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"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2022-08-10
    • 1970-01-01
    • 2014-10-13
    • 2021-12-04
    相关资源
    最近更新 更多