根据传入的字符串设置枚举值
我有许多setter方法,它们采用枚举。 这些基于传入对象属性。 而不是写一堆这些是有一种方法来硬编码说10个不同的案例陈述。 有没有办法创建一个可重用的方法?
//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; }
您可以在Enum
实现该function。
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 sideMap = new HashMap(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()));