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

java如何将String转换为enum

作者头像
硬核编程
发布于 2020-07-23 07:11:24
发布于 2020-07-23 07:11:24
4.2K00
代码可运行
举报
运行总次数: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 枚举类型 enum
枚举类型是 Java 5 中增加的一个小特性,在此之前,实现枚举的方式为定义编译期常量形式。而代码中使用编译期常量的方式在理解性和安全性方面存在不足,单纯的常量数值不能够直观的体现出其作为枚举实例的目的,且实际中无限的取值空间也不能很好的与理论上有限的枚举空间相匹配。
zhipingChen
2018/10/09
1.3K0
java 枚举(enum) 全面解读
枚举是Java1.5引入的新特性,通过关键字enum来定义枚举类。枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类.
全栈程序员站长
2022/06/29
1K0
Enum
Enum是一种受限制的类,编译时IDE会为enum生成一个相关的类,这个类继承自 java.lang.Enum,且具有自己的方法
晚上没宵夜
2020/05/19
7150
走进 JDK 之 Enum
什么是枚举?说实话,在我这些年的开发生涯中,用过枚举的次数大概两只手都可以数的过来。当然你不能说枚举一无是处,只能说是我对 Java 理解的还不够深刻,在可以使用枚举的时候并没有去使用。
路遥TM
2021/08/31
6790
Java--Enum的思考
枚举类是Java5引进的特性,其目的是替换int枚举模式或者String枚举模式,使得语义更加清晰,另外也解决了行为和枚举绑定的问题.
屈定
2018/09/27
1K0
MyBatis常用特性运用
在本小节,我将通过一个例子介绍MyBatis 中一些常用特性的运用,包括类型处理器,动态SQL等等。
码农飞哥
2021/08/18
4190
JDK枚举原理解析
枚举是我们在编码过程中常用的,比如电影有多种类型:喜剧片、动作片、恐怖片、爱情片、纪录片等等。在这种场景当中,我们可以编写一个枚举类(如MovieType)来进行表示。
孟君
2019/08/28
5950
JDK枚举原理解析
Java 扫描枚举类并获取属性
1、(必须)要返回的枚举必须遵守 MyEnum 接口规范,不一定要实现该接口,但必须有 getKey 和 getValue 两个方法;
訾博ZiBo
2025/01/06
870
Spring Boot 枚举类型的自动转换
需求:一般我们在数据库都会定义数值型的枚举常量,不管是序列化还是反序列化都是需要我们手动去转换成枚举类型的,既然这样我们能不能让它们自动转换呢?接下来我们就来尝试一下:
啵啵肠
2023/11/17
7970
Java枚举
这样一来,1-7的星期数就可以用WeekConstant.MON这样的方式来表达了,好看了不少,但是仍然存在一定的缺陷。
ruochen
2021/11/21
2.5K0
深入分析 Java 的枚举 enum
enum全称为enumeration,中文意为枚举,枚举简单的说就是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合。
JavaEdge
2019/03/05
2K0
Java 枚举:理解枚举本质
注意:C 语言中枚举成员的值是根据上下文自动加 1 的(GREEN = 1, BLUE = 2 等)。
用户7886150
2020/12/03
1.5K0
Map集合转换成实体类对象,实体类对象转换为map集合,互转工具类「建议收藏」
注 : 2019-06-16日 增加第六节 map与实体互转工具类,直接看第6节;
全栈程序员站长
2022/09/02
7K0
恕我直言,我怀疑你并不会用 Java 枚举
开门见山地说吧,enum(枚举)是 Java 1.5 时引入的关键字,它表示一种特殊类型的类,默认继承自 java.lang.Enum。
沉默王二
2020/06/09
3540
java枚举类型enum的使用
最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前我们都是采用这种方式定义的,很少采用enum 定义,所以也都没有注意过,面对突入起来的问题,还真有点不太清楚为什么有这样的定义。既然不明白就抽时间研究下吧。 Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。要了解枚举类型,建议大家先打开jdk 中的Enum类简单读一下,这个类里面
java达人
2018/01/31
1.2K0
聊一聊Java枚举(enmu)的使用
枚举可以被认为是一个密封类的语法糖,该类在编译时仅实例化了若干次,以定义一组常量。
终身幼稚园
2020/05/18
1.4K0
09 枚举类
枚举用来管理一组相关常量的集合,使用枚举可以提高程序的可读性,使代码更清晰且更易于维护。
acc8226
2022/05/17
3680
掌握 Java 枚举,提升代码质量
枚举类是在 Java 5(也称为 Java 1.5)中引入的。此版本的引入使得枚举类型不仅可以简单地定义常量集合,还支持属性、方法和构造函数,从而增强了语言的表达能力。自从引入枚举后,在 Java 开发中得到了广泛应用,尤其是在状态管理、策略模式、命令模式等场景中,提升了代码的可读性和可维护性。在Java编程中,枚举(enum)是一种非常强大的特性。它不仅提供了对一组常量的良好封装,还允许我们为这些常量定义方法和属性,从而提升代码的可读性和可维护性。在这篇文章中,我们将深入探讨如何优雅地编写枚举类,涵盖枚举的基本用法、设计模式、常用方法以及最佳实践。
不惑
2025/04/21
1580
掌握 Java 枚举,提升代码质量
Enum源码解析
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
1.2K0
Enum源码解析
Java基础系列(二十):枚举入门
关键字 enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件来使用,这种新的类型就是枚举类。
山禾说
2019/01/21
4020
相关推荐
Java 枚举类型 enum
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验