ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 带有字符串值的 Java 枚举 > 原文: [https://howtodoinjava.com/java/enum/java-enum-string-example/](https://howtodoinjava.com/java/enum/java-enum-string-example/) 在本本使用字符串值进行 Java 枚举的指南中,学习**使用字符串**创建枚举,遍历所有枚举值,获取枚举值以及对**进行反向查找,以通过字符串**参数查找枚举。 具有固定值的固定属性集时,应始终创建枚举。 [它们本质上是单例](//howtodoinjava.com/java/enum/is-enum-really-best-for-singletons/),提供了更好的性能。 ## 1\. 使用字符串值创建 Java 枚举 Java 程序*用字符串*创建枚举。 该枚举包含部署环境及其各自的 URL。 将每个枚举常量的 URL 传递给**枚举构造器**。 ```java public enum Environment { PROD("https://prod.domain.com:1088/"), SIT("https://sit.domain.com:2019/"), CIT("https://cit.domain.com:8080/"), DEV("https://dev.domain.com:21323/"); private String url; Environment(String envUrl) { this.url = envUrl; } public String getUrl() { return url; } } ``` ## 2\. 迭代枚举常量 要遍历**枚举列表**,请对枚举类型使用`values()`方法,该方法返回数组中的所有枚举常量。 ```java //Get all enums for(Environment env : Environment.values()) { System.out.println(env.name() + " :: "+ env.getUrl()); } ``` 输出: ```java PROD :: https://prod.domain.com:1088/ SIT :: https://sit.domain.com:2019/ CIT :: https://cit.domain.com:8080/ DEV :: https://dev.domain.com:21323/ ``` ## 3\. Java 枚举转换为`String` 要获取单个枚举值(例如,从枚举常量获取产品网址),请使用您创建的值方法。 ```java //Using enum constant reference String prodUrl = Environment.PROD.getUrl(); System.out.println(prodUrl); ``` 输出: ```java https://prod.domain.com:1088/ ``` ## 4\. 按名称获取枚举 – 枚举字符串参数 如果您想使用它的名称获取枚举常量,请使用`valueOf()`方法。 ```java //First get enum constant reference from string Environment sitUrl = Environment.valueOf("SIT"); System.out.println(sitUrl.getUrl()); ``` 输出: ```java https://sit.domain.com:2019/ ``` ## 5\. 反向查找 – 从值中获取枚举名称 很多时候,我们将拥有枚举的值,并且我们将需要**通过字符串**值获取枚举名称。 这可以通过反向查找来实现。 在反向查找中,枚举在内部维护***值到枚举***的映射作为键值对。 搜索了此映射,应用程序需要查找与其关联的字符串值有关的枚举。 ```java import java.util.HashMap; import java.util.Map; public enum Environment { PROD("https://prod.domain.com:1088/"), SIT("https://sit.domain.com:2019/"), CIT("https://cit.domain.com:8080/"), DEV("https://dev.domain.com:21323/"); private String url; Environment(String envUrl) { this.url = envUrl; } public String getUrl() { return url; } //****** Reverse Lookup Implementation************// //Lookup table private static final Map<String, Environment> lookup = new HashMap<>(); //Populate the lookup table on loading time static { for(Environment env : Environment.values()) { lookup.put(env.getUrl(), env); } } //This method can be used for reverse lookup purpose public static Environment get(String url) { return lookup.get(url); } } ``` 要使用此反向查找,请在应用程序代码中使用`enum.get()`方法。 ```java //Get enum constant by string - Reverse Lookup String url = "https://sit.domain.com:2019/"; Environment env = Environment.get(url); System.out.println(env); ``` Output: ```java SIT ``` > 阅读更多:[完整的 Java 枚举指南](//howtodoinjava.com/java/enum/guide-for-understanding-enum-in-java/) 在评论部分,将我对 **Java 8 枚举**的问题留给我。 学习愉快! 阅读更多: [Java 枚举教程](http://www.ntu.edu.sg/home/ehchua/programming/java/javaenum.html)