前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java如何将String转换为enum

java如何将String转换为enum

作者头像
硬核编程
发布2020-07-23 15:11:24
3.7K0
发布2020-07-23 15:11:24
举报
文章被收录于专栏:程序员成长充电站

Java 必知必会 第 7 篇

(精挑 Stack Overflow在java中排名前100的问题

懂得这些问题的答案帮你解决80%开发问题 )

问题

假设定义了如下的enum(枚举):

代码语言:javascript
复制
public enum Blah {
 
    A, B, C, D
 
}
 

已知枚举对应的String值,希望得到对应的枚举值。例如,已知"A",希望得到对应的枚举——Blah.A,应该怎么做? Enum.valueOf()是否能实现以上目的,如果是,那我如何使用?

答案

是的,Blah.valueOf("A") 将会得到 Blah.A

静态方法valueOf() 和 values() 不存在于源码中,而是在编译时创建,我们也可以在JavaDoc查看到它们,比如 Dialog.ModalityTyp 就中出现这两个方法。

其他答案

当文本和枚举值不同时,可以采用这种方式:

代码语言:javascript
复制
public enum Blah {
 
  A("text1"),
 
  B("text2"),
 
  C("text3"),
 
  D("text4");
 


 
 private String text;
 


 
 Blah(String text) {
 
 this.text = text;
 
 }
 


 
 public String getText() {
 
 return this.text;
 
 }
 


 
 public static Blah fromString(String text) {
 
 for (Blah b : Blah.values()) {
 
 if (b.text.equalsIgnoreCase(text)) {
 
 return b;
 
 }
 
 }
 
 return null;
 
 }
 
}
 

fromString方法中,throw new IllegalArgumentException("No constant with text " + text + " found") 会比直接返回null更优秀.

其他答案

我有一个挺赞的工具方法:

代码语言:javascript
复制
/**
 
 * A common method for all enums since they can't have another base class
 
 * @param <T> Enum type
 
 * @param c enum type. All enums must be all caps.
 
 * @param string case insensitive
 
 * @return corresponding enum, or null
 
 */
 
public static <T extends Enum<T>> T getEnumFromString(Class<T> c, String string) {
 
 if( c != null && string != null ) {
 
 try {
 
 return Enum.valueOf(c, string.trim().toUpperCase());
 
 } catch(IllegalArgumentException ex) {
 
 }
 
 }
 
 return null;
 
}
 

你可以这么使用:

代码语言:javascript
复制
public static MyEnum fromString(String name) {
 
 return getEnumFromString(MyEnum.class, name);
 
}
 
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 硬核编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 答案
  • 其他答案
  • 其他答案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档