gpt4 book ai didi

Java 枚举和 if 语句,有没有更好的方法来做到这一点?

转载 作者:搜寻专家 更新时间:2023-11-01 01:11:28 26 4
gpt4 key购买 nike

我有一个 java Enum 类,在运行时我将从命令行读取一个值,我想将这个值对应到我的 Enum 中的一个值类(class)。 Shipper 是我的枚举类。有没有更好的方法来代替下面的 ifelse if?这很难看。

private List<Shipper> shipperName = new ArrayList<Shipper>();
...
public void init(String s){
if(s.equals("a")){
shipperName.add(Shipper.A);
}else if(s.equals("b")){
shipperName.add(Shipper.B);
}else if(s.equals("c")){
shipperName.add(Shipper.C);
}else if(s.equals("d")){
shipperName.add(Shipper.D);
}else if(s.equals("e")){
shipperName.add(Shipper.E);
}else{
System.out.println("Error");
}
}

这是我的 Shipper.class

public enum Shipper
{
A("a"),
B("b"),
C("c"),
D("e"),
F("f")
;

private String directoryName;

private Shipper(String directoryName)
{
this.directoryName = directoryName;
}

public String getDirectoryName()
{
return directoryName;
}
}

最佳答案

是的,将字符串添加到枚举的构造函数中(在枚举中指定一个采用字符串的构造函数)并创建文本值为 a、b、c 的枚举。等等 然后在枚举上实现一个静态工厂方法,它接受一个字符串并返回枚举实例。我将此方法称为 textValueOf。枚举中现有的 valueOf 方法不能用于此目的。像这样:

public enum EnumWithValueOf {

VALUE_1("A"), VALUE_2("B"), VALUE_3("C");

private String textValue;

EnumWithValueOf(String textValue) {
this.textValue = textValue;
}

public static EnumWithValueOf textValueOf(String textValue){

for(EnumWithValueOf value : values()) {
if(value.textValue.equals(textValue)) {
return value;
}
}

throw new IllegalArgumentException("No EnumWithValueOf
for value: " + textValue);
}
}

这是不区分大小写的,文本值可以与枚举名称不同 - 如果您的数据库代码是深奥的或非描述性的,但您希望在 Java 代码中使用更好的名称,则这是完美的选择。客户端代码然后做:

EnumWithValueOf enumRepresentation = EnumWithValueOf.textValueOf("a");

关于Java 枚举和 if 语句,有没有更好的方法来做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5983150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com