有Base类和从它派生的一些类Child1,Child2,Child3等。 鉴于代码:
Base object;
String data = ...;
switch(data) {
case "Child1" :
object = new Child1();
break;
case "Child2" :
object = new Child2();
break;
case "Child3" :
object = new Child3():
break;
default:
object = null;
break;
}
如果有可能,任何想法如何重构它?
答案 0 :(得分:2)
尝试(未经测试):
public enum BaseType{
CHILD_1("Child1"){
@Override
public Base createBase(){
return new Child1();
}
},
CHILD_2("Child2"){
@Override
public Base createBase(){
return new Child2();
}
},
CHILD_3("Child3"){
@Override
public Base createBase(){
return new Child3();
}
};
private static final Map<String, BaseType> TYPES = new HashMap<>();
static {
for(BaseType type : values()){
TYPES.put(type.name, type);
}
}
private final String name;
protected BaseType(String name){
this.name = name;
}
public abstract Base createBase();
public static BaseType getBaseType(String name){
return TYPES.get(name);
}
}
Base base = null;
String data = ...;
BaseType baseType = BaseType.getBaseType(data);
if (baseType != null){
base = baseType.createBase();
}
答案 1 :(得分:0)
根据您的后续评论,听起来这就是您要做的事情:
Base object;
String data = ...;
object = (Base)Class.forName(data).newInstance();