在enum中,当我们有一组固定的相关常量时,我们应该始终创建。枚举上单例的,因此它们提供了更好的性能。
1. 用字符串创建枚举
用字符串创建一个enum
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.获取枚举值
要获取单个枚举值(例如,从枚举常量获取生产 URL),请使用我们创建的值方法。
//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. 反向查找——从值中获取枚举名称
我们经常会有枚举的值,我们需要通过它的值来获取枚举名称。这是使用反向查找实现的。
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 ************//
public static Optional<Environment> get(String url) {
return Arrays.stream(Environment.values())
.filter(env -> env.url.equals(url))
.findFirst();
}
}
要在应用程序代码中使用反向查找,使用enum.get()
方法。
String url = "https://sit.domain.com:2019/";
Optional<Environment> env = Environment.get(url);
System.out.println(env.get());
输出:
SIT