虽然这可能是使用enum
直观的一个小柜台在这方面已经证明相当强大。
每个enum
都有一个valueOf(String)
方法,该方法返回该名称的Element。然后你可以在switch语句中使用检索到的元素。唯一难看的部分是valueOf(String)
抛出IllegalArgumentException
。因此捕捉这相当于一个默认情况。
enum Type{
JAVA_LANG_STRING;
CHAR;
DECIMAL;
BOOLEAN;
JAVA_LANG_BIGDECIMAL;
}
public static SwitchType<?> switchT(final String typeName,
final String memberName) {
try{
Type t = Type.valueOf(typeName.toUppercase().replace(".","_"));
switch(t){
case Type.JAVA_LANG_STRING: return new SwitchInputType<String>(new String(memberName + " "));
case Type.CHAR: return new SwitchInputType<Character>(new Character('a'));
case Type.DECIMAL:
case Type.JAVA_MATH_BIGDECIMAL: return new SwitchInputType<BigDecimal>(new BigDecimal("34.58"));
}catch(IllegalArgumentException e){
//default case
}
}
此外,枚举也可以实现接口。要么为每个元素提供一个实现,要么为全局元素提供一个实现。
interface SwitchInputTypeFacotry {
SwitchInputType get(String arg);
}
enum TypeName implements SwitchInputTypeFacotry{
CHAR{
SwitchInputType get(String arg){
return new SwitchInputType<Character>(new Character('a'));
}
}
[...]
}
public static SwitchType<?> switchT(final String typeName,
final String memberName) {
try{
SwitchInputTypeFacotry t = Type.valueOf(typeName.toUppercase().replace(".","_"));
return t.get(memberName);
}catch(IllegalArgumentException e){
//default case
}
}
第二种方式使得扩展功能非常容易(只要它保留在一个模块中,子类化对于枚举是不可能的)。
谢谢,静态应该在新班上? – 2013-02-14 09:33:13
这是什么意思,你写的只是静态 – 2013-02-14 09:49:39
@JeanTennie 1)否。2)“静态{...}”是一个*静态初始化*。看看它。 – 2013-02-14 09:58:52