专栏首页程序员成长充电站java如何将String转换为enum

java如何将String转换为enum

Java 必知必会 第 7 篇

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

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

问题

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

public enum Blah {
 
    A, B, C, D
 
}
 

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

答案

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

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

其他答案

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

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更优秀.

其他答案

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

/**
 
 * 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;
 
}
 

你可以这么使用:

public static MyEnum fromString(String name) {
 
 return getEnumFromString(MyEnum.class, name);
 
}
 

本文分享自微信公众号 - 硬核编程(hardcorecode),作者:钱胖子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 适合初学者提升的Git技能

    你知道git工作流的基本知识,熟悉一些基本的命令,如add,commit,push,pull,那么这篇文章可能适合你。这篇文章主要关注日常git使用改进,修复一...

    硬核编程
  • 封装变化的内容

    了解到这些情况后, 你可将船体分隔为独立的隔间, 并对其进行安全的密封, 以使得任何损坏都会被限制在隔间范围内。现在, 即使船撞上水雷也不会沉没了。

    硬核编程
  • 如何给3个布尔变量,当其中有2个或者2个以上为true才返回true

    给3个boolean变量,a,b,c,当其中有2个或2个以上为true时才返回true?

    硬核编程
  • SpringBoot2.0 整合 Shiro 框架,实现用户权限管理

    Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。作为一款安全框架Shiro的设计相当巧妙。Shiro的应用不依赖...

    知了一笑
  • 补习系列- springboot 整合 shiro一指禅

    Apache Shiro 是一个强大且易用的Java安全框架,用于实现身份认证、鉴权、会话管理及加密功能。 框架提供了非常简单且易于上手的API,可以支持快速为...

    美码师
  • Java枚举类使用和总结

    别先生
  • 抽象工厂模式

    抽象工厂中 接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 在简单工厂中,我们需要一辆车就用CarFact...

    OPice
  • 移动商城第五篇(用户模块)【用户登陆、回显用户、拦截器、收货地址】

    移动商城【用户登陆、回显用户】 我们来实现用户登陆的功能: ? 当点击的时候,出来的是一个弹出框,我们想要切换成一个页面。 ? 找到对应的事件、切换成我们的页面...

    Java3y
  • SpringBoot邂逅Shiro-前后端分离时的配置

    本篇仅是记录集成的基础过程,至于shiro框架的基础概念和使用细节,可以自行查阅相关资料,本文不做讨论。

    汐楓
  • 手写Java类解析器-01.class文件的基本结构

    这个系列的文章是为了探讨Java字节码是什么样的结构,如何能够准确的表达我们代码的含义。

    付威

扫码关注云+社区

领取腾讯云代金券