美文网首页Android技术知识Android开发
Android-泛型转对象,泛型转对象List

Android-泛型转对象,泛型转对象List

作者: h_f | 来源:发表于2019-08-05 17:40 被阅读12次

一、json转对象:
应用场景:接口中一个数据可能为对象,也可能是一个对象List(此处其实接口规范后,完全用不到下边的方法,没办法,一下方法就是想试试能不能适配这个情况)

public class HttpBeen<T>  implements Serializable{
    private String result;
    private String errorCode;
    private T ResultData;

}

对象中采用<T>泛型修饰。以下是将泛型转换为对象的方法:

/** 对象类型转换
     * @param obj  源对象
     * @param cla  目标对象类型
     * @param <T>  泛型
     * @return     目标对象
     */
    public static  <T> T jsonToBean(LinkedTreeMap obj,Class<T> cla) {
        T  dataBean = null;
        try {
            if(null==obj) {
                return null;
            }
            dataBean = cla.newInstance();
            Field[] beanFields = cla.getDeclaredFields();
            //通过set方法给目标对象赋值
            for(Field field:beanFields){
                if (field.getModifiers() == 26) continue;
                field.setAccessible(true);
                String fieldName = field.getName();
                Class<?> fieldType = field.getType();
                String fieldValue = obj.get(fieldName)==null?null:obj.get(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  目标对象类型
     * @param <T>  泛型
     * @return  目标对象
     */
    public static <T> List<T> jsonToBeanList(String json, Type clas) {
        Gson gson = new Gson();
        List<T> 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;
    }

这个没啥说的,自己百度看解析吧。
以上方法借鉴了一些大神的方法思路

相关文章

  • Android-泛型转对象,泛型转对象List

    一、json转对象:应用场景:接口中一个数据可能为对象,也可能是一个对象List(此处其实接口规范后,完全用不到下...

  • Java 集合深度复制

    泛型对象实现 Cloneable 接口 重写泛型对象的 clone 方法 使用的时候调用 泛型对象的 clone...

  • Java自学-泛型 泛型转型

    Java 中的子类泛型转型成父类泛型 步骤 1 : 对象转型 根据面向对象学习的知识,子类转父类 是一定可以成功的...

  • Java篇-泛型的使用

    一 : 泛型的使用场景 在集合中使用泛型 若集合中没有使用泛型,任何Object及其子类的对象都可以添加进来,强转...

  • Gson使用样例

    Gson使用样例代码 Student.java Json转换利器Gson之实例一-简单对象转化和带泛型的List转...

  • 探秘 Java 中的泛型(Generic)

    本文包括:JDK5之前集合对象使用问题泛型的出现泛型应用泛型典型应用自定义泛型——泛型方法自定义泛型——泛型类泛型...

  • java 杂项

    泛型 1.泛型类。泛型接口。泛型方法。2.T和Object区别 T是编译时检查,不用强转; 运行时检查,需要强转。...

  • Java 19-5.1泛型

    泛型类定义泛型类可以规定传入对象 泛型类 和泛型方法 泛型接口 如果实现类也无法确定泛型 可以在继承类中确定泛型:

  • 2022通用poi导出excel,5.x版本

    功能描述 数据集即查询出来的List,泛型必须是对象List<对象类>,而不是List >①支持多级标题,支...

  • 泛型

    Kotlin 泛型详解 声明一个泛型类 声明一个泛型方法 泛型约束 List 和 List 是...

网友评论

    本文标题:Android-泛型转对象,泛型转对象List

    本文链接:https://www.haomeiwen.com/subject/omamdctx.html