Skip to content

Latest commit

 

History

History
168 lines (113 loc) · 3.89 KB

209.md

File metadata and controls

168 lines (113 loc) · 3.89 KB

带有字符串值的 Java 枚举

原文: https://howtodoinjava.com/java/enum/java-enum-string-example/

在本本使用字符串值进行 Java 枚举的指南中,学习使用字符串创建枚举,遍历所有枚举值,获取枚举值以及对进行反向查找,以通过字符串参数查找枚举。

具有固定值的固定属性集时,应始终创建枚举。 它们本质上是单例,提供了更好的性能。

1. 使用字符串值创建 Java 枚举

Java 程序用字符串创建枚举。 该枚举包含部署环境及其各自的 URL。 将每个枚举常量的 URL 传递给枚举构造器

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()方法,该方法返回数组中的所有枚举常量。

//Get all enums
for(Environment env : Environment.values())
{
	System.out.println(env.name() + " :: "+ env.getUrl());
}

输出:

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

要获取单个枚举值(例如,从枚举常量获取产品网址),请使用您创建的值方法。

//Using enum constant reference
String prodUrl = Environment.PROD.getUrl();

System.out.println(prodUrl);

输出:

https://prod.domain.com:1088/

4. 按名称获取枚举 – 枚举字符串参数

如果您想使用它的名称获取枚举常量,请使用valueOf()方法。

//First get enum constant reference from string
Environment sitUrl = Environment.valueOf("SIT");

System.out.println(sitUrl.getUrl());

输出:

https://sit.domain.com:2019/

5. 反向查找 – 从值中获取枚举名称

很多时候,我们将拥有枚举的值,并且我们将需要通过字符串值获取枚举名称。 这可以通过反向查找来实现。

在反向查找中,枚举在内部维护值到枚举的映射作为键值对。 搜索了此映射,应用程序需要查找与其关联的字符串值有关的枚举。

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()方法。

//Get enum constant by string - Reverse Lookup
String url = "https://sit.domain.com:2019/";

Environment env = Environment.get(url);

System.out.println(env);

Output:

SIT

阅读更多:完整的 Java 枚举指南

在评论部分,将我对 Java 8 枚举的问题留给我。

学习愉快!

阅读更多:

Java 枚举教程