Java 按枚举';获取枚举;s构造函数值
在java中,通过枚举的构造函数值获取枚举的正确方法是什么? 下面是一个例子:Java 按枚举';获取枚举;s构造函数值,java,enums,Java,Enums,在java中,通过枚举的构造函数值获取枚举的正确方法是什么? 下面是一个例子: public enum Status{ CREATED("created"), IN_PROGRESS("inProgress"), COMPLETED("completed"); public final String statusStr; Status(String statusStr){ this.statusStr = statusStr; } } 因此,如果我得到的输入是一个“created”字符串
public enum Status{
CREATED("created"), IN_PROGRESS("inProgress"), COMPLETED("completed");
public final String statusStr;
Status(String statusStr){
this.statusStr = statusStr;
}
}
因此,如果我得到的输入是一个“created”字符串,那么如何从中获取Status.created 我认为你不能自动完成。您必须为此创建一个静态方法:
公共静态状态fromString(String){
对于(状态:values()){
if(status.statusStr.equals(string)){
返回状态;
}
}
抛出新的IllegalArgumentException(字符串);
}
结合@Pshemo的建议,代码也可以是:
@RequiredArgsConstructor@Getter
公共枚举状态{
已创建(“已创建”)、正在进行(“正在进行”)、已完成(“已完成”);
私有静态最终映射=Arrays.stream(Status.values())
.collect(Collectors.toMap(Status::getStatusStr,Function.identity());
私有最终字符串statusStr;
来自字符串的公共静态状态(字符串){
返回Objects.requirennull(MAP.get(string));
}
}
不是完整的副本,但请查看循环值或构建查找映射考虑使用valueOf
而不是创建自己的并行字符串查找方法。我认为在这里放弃Java常量的命名约定,使用created
,inProgress
等作为枚举值是明智的。在此之前我给出了以下建议:可能的改进:每次调用values()
都会创建状态枚举值的新数组,并且这些数组将始终具有相同的状态元素。我们可以调用values()
一次,并像private static final Status[]values=values()那样缓存它编码>并在方法中使用值。我们还可以使用Map
作为缓存。只需在静态初始化块中填充它,并像publicstationstatusfromstring(String){returnmap.get(String);}
一样使用它。