使用范围:前端表单请求转换成后端实体类
技术
使用了SPI机制获取实现类代码
类型转换责任链
类型转换链
public class TypeSwitchChain<T> {
// 服务提供者加载工具,通过配置文件找到对应的接口的实现类并返回实现类的集合
private static ServiceLoader<TypeSwitch> switches = ServiceLoader.load(TypeSwitch.class);
// 迭代器
private Iterator<TypeSwitch> iterator = switches.iterator();
public T doTypeSwitch(Class<?> clazz, Object value) {
while (iterator.hasNext()){
TypeSwitch<T> tTypeSwitch = iterator.next();
if (tTypeSwitch.supports(clazz)){
return tTypeSwitch.valueOf(value);
}
}
return null;
}
}
类型转换接口
public interface TypeSwitch<T> {
/**
* 进行判断,看实现类是否可以执行
*
* @param clazz 字段类型
* @return
*/
boolean supports(Class<?> clazz);
/**
* 处理值
*
* @param value 需要转换的值
* @return
*/
T valueOf(Object value);
}
类型转换实现类
String 类型转换
public class StringSwitch implements TypeSwitch<String> {
@Override
public boolean supports(Class<?> clazz) {
return clazz == String.class;
}
@Override
public String valueOf(Object value) {
return value.toString();
}
}
Integer 类型转换
public class IntegerSwitch implements TypeSwitch<Integer> {
@Override
public boolean supports(Class clazz) {
return clazz == Integer.class || clazz == Integer.TYPE;
}
@Override
public Integer valueOf(Object value) {
return Integer.valueOf(value.toString());
}
}