Java枚举和if语句,有更好的方法吗?
我有一个 java Enum
类,在运行时我将从命令行读取一个值,并且我想将该值与我的 Enum
类中的值相对应。 Shipper
是我的枚举类。有没有更好的方法来做到这一点,而不是下面的 if
和 else 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;
}
}
I have an java Enum
class, and at runtime I will read in a value from command line, and I want to correspond this value to a value in my Enum
class. Shipper
is my Enum Class. Is there a better way do this this, instead of if
and else if
below? This look ugly.
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");
}
}
Here is my 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;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是,将字符串添加到枚举的构造函数中(在枚举中指定一个采用字符串的构造函数),并使用文本值 a、b 、c 创建枚举。等等。然后在枚举上实现一个静态工厂方法,它接受一个字符串并返回枚举实例。我将此方法称为 textValueOf。枚举中现有的 valueOf 方法不能用于此目的。像这样的事情:
这是不区分大小写的,并且文本值可以与枚举名称不同 - 如果您的数据库代码深奥或非描述性,但您希望在 Java 代码中使用更好的名称,那么这是完美的。客户端代码然后执行:
Yes add the string into the enum's constructor (specify a constructor in the enum which takes a String) and create the enums with a text value of a, b , c. Etc. Then implement a static factory method on the enum which takes a string and returns the enum instance. I call this method textValueOf. The existing valueOf method in enum cannot be used for this. Something like this:
This is case insensitive and the text value can be different to the enum name - perfect if your database codes are esoteric or non descriptive, but you want better names in the Java code. Client code then do:
如果名称并不总是与枚举匹配,您可以执行以下操作
If the name doesn't always match the enumeration you can do something like this
您可以从 valueOf() 方法获取 Enum:
编辑:
如果它不仅仅是一个简单的 a ->一个案例,那么创建一个带有 key=>value 对的 HashMap 可能是一个想法:
我希望这会有所帮助!
You can get an Enum from the valueOf() method:
EDIT:
If it is not just a simple a -> A case, then it might be an idea to create a HashMap with key=>value pairs:
I hope this helps!