如何解决根据传入的String设置Enum值
| 我有一些使用枚举的setter方法。这些基于传入对象属性。不必编写一堆这些代码,而是有一种方法可以使您不必硬编码10个不同的case语句。有没有办法创建可重用的方法?//Side class declared as
public final enum Side
//How I initialise side
static Side side = Side.SELL;//default
//method to set object
Obj.setSide(sideEnum(zasAlloc.getM_buySellCode()));
//How I am implementing it
public static Side sideEnum(String buysell)
{
if(buysell.equalsIgnoreCase(\"S\"))
{
side = Side.SELL; //default
}
else if(buysell.equalsIgnoreCase(\"B\"))
{
side = Side.BUY;
}
return side;
}
解决方法
您可以在ѭ1中实现该功能。
public enum Side {
BUY(\"B\"),SELL(\"S\"),...
private String letter;
private Side(String letter) {
this.letter = letter;
}
public static Side fromLetter(String letter) {
for (side s : values() ){
if (s.letter.equals(letter)) return s;
}
return null;
}
}
如果您无法编辑Side
,也可以将其作为辅助静态方法。
public static Side fromString(String from) {
for (Side s: Side.values()) {
if (s.toString().startsWith(from)) {
return s;
}
}
throw new IllegalArgumentException( from );
}
上面的方法假定您的字符串与您的枚举名称相对应。
,枚举具有valueOf()方法,可用于从String转换。是您要找的东西吗?
,我最终使用了一个简单的对象图:
private static HashMap<String,Side> sideMap = new HashMap<String,Side>(7);
static{
sideMap.put(\"B\",Side.BUY);
sideMap.put(\"S\",Side.SELL);
}
并简单地使用
Obj.setSide(sideMap.get(zasAlloc.getM_buySellCode()));
,我认为您需要这样的东西:
Obj.setSide(Side.valueOf(zasAlloc.getM_buySellCode()));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。