在字符串到实体转换一文中介绍了Spring核心框架中使用PropertyEditor将任何字符串转换为数字、实体的方法。除了字符串到实体,Spring还提供了更加通用的功能在对象和对象之间进行数据转换。
Converter<S, T>
Spring的类型转换的基础是Converter<S, T>(以下简称转换器)接口:
package org.springframework.core.convert.converter;
public interface Converter<S, T> {
T convert(S source);
}
光是看他的结构就很清晰的明白这个接口是要做什么。S表示Source(来源)、T表示Target(目标),所以这个接口的2个范型参数就是数据从S转换为T,Converter::convert方法正是输入一个“S”类型的实例,返回一个“T”类型的实例。
可以通过这个接口实现规范化、可复用的类型转换功能。下面通过转换器实现字符串到PC实体类相互转换的过程。
Pc实体:
public class PC extends Device {
String cpu;
String graphic;
String ram;
//Getter & Setter ...
}
在基类Device中通过反射实现字符串到实体类的转换:
public abstract class Device {
public void pares(String text){ //字符串转换为实体
Field[] fields = this.getClass().getDeclaredFields();
for (Field field : fields) {
int begIndex = text.indexOf(field.getName());
int endIndex = text.indexOf(";", begIndex);
String sub = text.substring(begIndex, endIndex), value = sub.split("=")[1];
field.setAccessible(true);
field.set(this, value);
}
};
public String value(){ //实体转换为字符串
Field[] fields = this.getClass().getDeclaredFields();
StringBuilder sb = new StringBuilder();
for (Field field : fields) {
sb.append(field.getName());
sb.append("