根据传入的字符串设置枚举值

我有许多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()));