Java方法泛型
方法泛型
一个通用的方法泛型,传入DTO,将json数据解析为DTO。
import com.alibaba.fastjson.JSON;
protected <T> List<T> getDataFromOutInterface(Map inParam, String url, Class<T> t) {
try{
/**
* 成功返回格式
* [
{
"id":1,
"name":"king",
"age":22,
"birthday":"1998-06-10",
"photo":[102,103.....] 一个byte数组,保存了头像信息
}
]
查询不到返回:
[]
*/
String responseJson = HttpClientUtil.post(url, inParam);
List<T> list = JSON.parseArray(responseJson, t);
return list;
}catch (Exception e){
logger.error(e.getMessage());
}
return null;
}
这样就可以根据返回定义一个DTO。
@Data
public class UserInfo {
private Integer id;
private String name;
private Integer age;
private Date birthday;
private byte[] photo;
}
调用就可以使用如下方式,
List<UserInfo> infos = this.getDataFromOutInterface(inParam, url, UserInfo.class);
不得不说,fastjson真的牛逼。
获取泛型数据内容
一个通用的泛型方法,获取其中传递进来的对象内容。将繁体中文转换为简体中文。
/**
* 繁体转换为简体
* @param data
* @param needJanNames 需要转换的字段名
* @param <T>
*/
public <T> void convert(T data,Set needJanNames){
try {
Class clazz = data.getClass();
for (Field field : clazz.getDeclaredFields()) {
field.setAccessible(true);
Object o = field.get(data);
if(o!=null&&needJanNames.contains(field.getName())){
String janValue = this.convert(o.toString());
field.set(data,janValue);
}
field.setAccessible(false);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
使用如下调用方式:
UserInfo info = new UserInfo();
convert(info, needJanNames);