Java代码消除switchcase,ifelse语句的⼏种实现⽅式我们在平时的编码中,我们经常会遇到这样的情况:
使⽤过多的switch/case 或者 if else 语句,⾮常不爽,也违背了⾯向对象的原则:
public static Validator newInstance(String validatorType) {
if ("INT".equals(validatorType))
return new IntValidator();
else if ("DATE".equals(validatorType))
return new DateValidator();
else if ("LOOKUPVALUE".equals(validatorType))
return new LookupValueValidator();
else if ("STRINGPATTERN".equals(validatorType))
return new StringPatternValidator();
return null;
}
或相应的switch case代码。
下⾯我提供⼏种⽅式消除这些讨厌的switch/case,if/else语句:
1、反射
利⽤反射创建对象:
public static Validator newInstance(String validatorClass) {
return Class.forName(validatorClass).newInstance();
}
缺点:需要根据类的全名进⾏返回对象。
2、Map
提前将对象根据相应的key-object放⼊map
Map<String, Validator> validators = new HashMap<String,Validator>(){
java switch case string{
put("INT",new IntValidator());
put("LOOKUPVALUE",new LookupValueValidator());
put("DATE",new DateValidator());
put("STRINGPATTERN",new StringPatternValidator());
}
};
public Validator newInstance(String validatorType) {
(validatorType);
}
3、Enum
根据不同的枚举类型值调⽤newInstance创建出不同的对象。
enum ValidatorType {
INT {
public Validator create() {
return new IntValidator();
}
},
LOOKUPVALUE {
public Validator create() {
return new LookupValueValidator();
}
},
DATE {
public Validator create() {
return new DateValidator();
}
};
public Validator create() {
return null;
}
}
public Validator newInstance(ValidatorType validatorType) { ate();
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论