android⽣成泛型对象,Android-泛型转对象,泛型转对象List ⼀、json转对象:
应⽤场景:接⼝中⼀个数据可能为对象,也可能是⼀个对象List(此处其实接⼝规范后,完全⽤不到下边的⽅法,没办法,⼀下⽅法就是想试试能不能适配这个情况)
public class HttpBeen implements Serializable{
private String result;
private String errorCode;
private T ResultData;
}
对象中采⽤泛型修饰。以下是将泛型转换为对象的⽅法:
/** 对象类型转换
* @param obj 源对象
* @param cla ⽬标对象类型
* @param 泛型
* @return ⽬标对象
*/
public static T jsonToBean(LinkedTreeMap obj,Class cla) {
T dataBean = null;
try {
if(null==obj) {
return null;
}
dataBean = wInstance();
Field[] beanFields = DeclaredFields();
/
/通过set⽅法给⽬标对象赋值
for(Field field:beanFields){
if (Modifiers() == 26) continue;
field.setAccessible(true);
String fieldName = Name();
Class> fieldType = Type();
String fieldValue = (fieldName)==null?(fieldName).toString();
if(fieldValue!=null){
try {
if(String.class.equals(fieldType)){
field.set(dataBean, fieldValue);
}else if(byte.class.equals(fieldType)){
field.setByte(dataBean, Byte.parseByte(fieldValue));
}else if(Byte.class.equals(fieldType)){
field.set(dataBean, Byte.valueOf(fieldValue));
}else if(boolean.class.equals(fieldType)){
field.setBoolean(dataBean, Boolean.parseBoolean(fieldValue));
}else if(Boolean.class.equals(fieldType)){
field.set(dataBean, Boolean.valueOf(fieldValue));
}else if(short.class.equals(fieldType)){
field.setShort(dataBean, Short.parseShort(fieldValue));
}else if(Short.class.equals(fieldType)){
field.set(dataBean, Short.valueOf(fieldValue));
}else if(int.class.equals(fieldType)){
field.setInt(dataBean, Integer.parseInt(fieldValue));
}else if(Integer.class.equals(fieldType)){
field.set(dataBean, Integer.valueOf(fieldValue));
}else if(long.class.equals(fieldType)){
field.setLong(dataBean, Long.parseLong(fieldValue));
}else if(Long.class.equals(fieldType)){
field.set(dataBean, Long.valueOf(fieldValue));
}else if(float.class.equals(fieldType)){
field.setFloat(dataBean, Float.parseFloat(fieldValue));
}else if(Float.class.equals(fieldType)){
field.set(dataBean, Float.valueOf(fieldValue));
}else if(double.class.equals(fieldType)){
field.setDouble(dataBean, Double.parseDouble(fieldValue));
}else if(Double.class.equals(fieldType)){
field.set(dataBean, Double.valueOf(fieldValue));
}else if(Date.class.equals(fieldType)){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); field.set(dataBean, sdf.parse(fieldValue));
}
} catch (IllegalArgumentException e) {
// e.printStackTrace();
return null;
} catch (ParseException e) {
// e.printStackTrace();
return null;
}
}
}
} catch (Exception e) {
return null;
// e.printStackTrace();
}
return dataBean;
}
此处LinkedTreeMap的原因是项⽬采⽤Retrofit+OKHttp的⽅式⽹络框架,Gson解析,泛型情况下Gson会将格式擦除,转换为LinkedTreeMap。
⼆、json转对象List:
/**
* 对象数组类型转换
* @param json 源对象
* @param clas ⽬标对象类型
android retrofit* @param 泛型
* @return ⽬标对象
*/
public static List jsonToBeanList(String json, Type clas) {
Gson gson = new Gson();
List list = new ArrayList<>();
JsonParser parser = new JsonParser();
JsonArray jsonarray = parser.parse(json).getAsJsonArray();
for (JsonElement element : jsonarray) {
list.add(gson.fromJson(element, clas));
}
return list;
}
这个没啥说的,⾃⼰百度看解析吧。以上⽅法借鉴了⼀些⼤神的⽅法思路
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论