首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java如何将String转换为enum

java如何将String转换为enum

作者头像
硬核编程
发布于 2020-07-23 07:11:24
发布于 2020-07-23 07:11:24
4.4K00
代码可运行
举报
运行总次数:0
代码可运行

Java 必知必会 第 7 篇

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

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

问题

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public enum Blah {
 
    A, B, C, D
 
}
 

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

答案

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

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

其他答案

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java 扫描枚举类并获取属性
1、(必须)要返回的枚举必须遵守 MyEnum 接口规范,不一定要实现该接口,但必须有 getKey 和 getValue 两个方法;
訾博ZiBo
2025/01/06
1600
MyBatis常用特性运用
在本小节,我将通过一个例子介绍MyBatis 中一些常用特性的运用,包括类型处理器,动态SQL等等。
码农飞哥
2021/08/18
4380
恕我直言,我怀疑你并不会用 Java 枚举
开门见山地说吧,enum(枚举)是 Java 1.5 时引入的关键字,它表示一种特殊类型的类,默认继承自 java.lang.Enum。
沉默王二
2020/06/09
3630
JDK枚举原理解析
枚举是我们在编码过程中常用的,比如电影有多种类型:喜剧片、动作片、恐怖片、爱情片、纪录片等等。在这种场景当中,我们可以编写一个枚举类(如MovieType)来进行表示。
孟君
2019/08/28
6090
JDK枚举原理解析
Java基础系列(二十):枚举入门
关键字 enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件来使用,这种新的类型就是枚举类。
山禾说
2019/01/21
4180
走进 JDK 之 Enum
什么是枚举?说实话,在我这些年的开发生涯中,用过枚举的次数大概两只手都可以数的过来。当然你不能说枚举一无是处,只能说是我对 Java 理解的还不够深刻,在可以使用枚举的时候并没有去使用。
路遥TM
2021/08/31
6960
Java--Enum的思考
枚举类是Java5引进的特性,其目的是替换int枚举模式或者String枚举模式,使得语义更加清晰,另外也解决了行为和枚举绑定的问题.
屈定
2018/09/27
1K0
分享一个我常用的枚举,使用频率很高
那么就该有个枚举去控制转换这个状态了,那么Boolean.FALSE、Boolean.TRUE不能正常去使用么
半月无霜
2025/02/26
752
关于Enum的再次理解
Java中的基本数据类型只有8种,分别是 byte、short、int、long、float、double、char、boolean
PhoenixZheng
2018/08/07
6190
Python: Enum枚举的实现
http://www.cnblogs.com/codingmylife/archive/2013/05/31/3110656.html
bear_fish
2018/09/20
8880
09 枚举类
枚举用来管理一组相关常量的集合,使用枚举可以提高程序的可读性,使代码更清晰且更易于维护。
acc8226
2022/05/17
3820
java 枚举(enum) 全面解读
枚举是Java1.5引入的新特性,通过关键字enum来定义枚举类。枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类.
全栈程序员站长
2022/06/29
1.1K0
枚举enum基本特性
enum(枚举)是Java se5中添加的一个新特性,是指一个经过排序的、被打包成一个单一实体的项列表。一个枚举的实例可以使用枚举项列表中任意单一项的值。枚举在各个语言当中都有着广泛的应用,通常用来表示诸如颜色、方式、类别、状态等等数目有限、形式离散、表达又极为明确的量。
栋先生
2018/09/29
5620
Spring Boot 枚举类型的自动转换
需求:一般我们在数据库都会定义数值型的枚举常量,不管是序列化还是反序列化都是需要我们手动去转换成枚举类型的,既然这样我们能不能让它们自动转换呢?接下来我们就来尝试一下:
啵啵肠
2023/11/17
8810
深入分析 Java 的枚举 enum
enum全称为enumeration,中文意为枚举,枚举简单的说就是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合。
JavaEdge
2019/03/05
2.1K0
钻钻 “单例” 的牛角尖
上篇文章 走进 JDK 之 Enum 提到过,枚举很适合用来实现单例模式。实际上,在 Effective Java 中也提到过(果然英雄所见略同):
路遥TM
2021/08/31
4950
Enum
Enum是一种受限制的类,编译时IDE会为enum生成一个相关的类,这个类继承自 java.lang.Enum,且具有自己的方法
晚上没宵夜
2020/05/19
7430
Java中的枚举,竟然有这么多不为人知的知识点
Java枚举,也称作Java枚举类型,是一种字段由一组固定常量集合组成的类型。枚举的主要目的是加强编译时类型的安全性。enum关键字是Java中的保留关键字。
程序新视界
2021/03/20
6010
Java 枚举类型 enum
枚举类型是 Java 5 中增加的一个小特性,在此之前,实现枚举的方式为定义编译期常量形式。而代码中使用编译期常量的方式在理解性和安全性方面存在不足,单纯的常量数值不能够直观的体现出其作为枚举实例的目的,且实际中无限的取值空间也不能很好的与理论上有限的枚举空间相匹配。
zhipingChen
2018/10/09
1.3K0
Java中枚举的线程安全性及序列化问题
要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关键字,他并不是一个类,那么枚举是由什么类维护的呢,我们简单的写一个枚举:
一个程序员的成长
2020/11/25
1.3K0
Java中枚举的线程安全性及序列化问题
相关推荐
Java 扫描枚举类并获取属性
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档