# 带有字符串值的 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)