不要直接使用valueOf()。
这是区分大小写的,并在找不到对应的enum 时抛出错误。
您需要查找
name 字段,而不是
status 字段:
public static MyEnum fromString(String text) {
return Arrays.stream(values())
.filter(v -> v.name().equalsIgnoreCase(text))
.findFirst()
.orElse(null);
}
}
一旦你有你的枚举,调用getStatus()方法返回Approved:
MyEnum foundEnum = MyEnum.fromString("A");
System.out.println(foundEnum != null ? foundEnum.getStatus() : "- Not found -");
或使用Optional 方法:
public static Optional<MyEnum> fromStringOptional(String text) {
try {
return Optional.of(MyEnum.valueOf(text));
} catch (IllegalArgumentException|NullPointerException e) {
return Optional.empty();
}
}
然后做
Optional<MyEnum> foundEnum3 = MyEnum.fromStringOptional(searchString);
System.out.println(foundEnum3.map(a -> a.getStatus()).orElse("- Not found -"));
System.out.println(foundEnum3.isPresent() ? foundEnum3.getStatus() : "- Not found -");
完整示例:
import java.util.Arrays;
import java.util.Optional;
public class EnumDemo {
public enum MyEnum {
A("Approved"),
R("Reject New");
private String status;
private MyEnum(String status) {
this.status = status;
}
public String getStatus() {
return status;
}
public static MyEnum getEnumfromString(String text) {
return Arrays.stream(values())
.filter(v -> v.name().equalsIgnoreCase(text))
.findFirst()
.orElse(null);
}
public static String getStatusfromString(String text) {
MyEnum found = Arrays.stream(values())
.filter(v -> v.name().equalsIgnoreCase(text))
.findFirst()
.orElse(null);
return found != null ? found.getStatus() : "- Not found -";
}
public static Optional<MyEnum> getOptionalfromString(String text) {
try {
return Optional.of(MyEnum.valueOf(text));
} catch (IllegalArgumentException|NullPointerException e) {
return Optional.empty();
}
}
}
public static void doCalls(String searchString) {
System.out.print("Call 1: ");
MyEnum foundEnum = MyEnum.getEnumfromString(searchString);
System.out.println(foundEnum != null ? foundEnum.getStatus() : "- Not found -");
System.out.print("Call 2: ");
System.out.println(MyEnum.getStatusfromString(searchString));
System.out.println("Call 3 :");
System.out.print(" A: ");
Optional<MyEnum> foundOptional = MyEnum.getOptionalfromString(searchString);
System.out.println(foundOptional.map(a -> a.getStatus()).orElse("- Not found -"));
//or this, which only prints if the enum was found
System.out.print(" B: ");
foundOptional.ifPresent(a -> System.out.println(a.getStatus()));
}
public static void main(String[] args) {
System.out.println("Existing enum: 'A'");
doCalls("A");
System.out.println("");
System.out.println("Non-existing enum: 'B'");
doCalls("B");
}
}
测试输出:
现有枚举:'A'
呼叫 1:已批准
呼叫 2:已批准
呼叫 3 :
答:已批准
B:批准
不存在的枚举:'B'
呼叫 1:- 未找到 -
调用 2:- 未找到 -
呼叫 3 :
答: - 未找到 -
乙: