android Model对象转换方法,两个实体类对象赋值简便方法
来源:互联网 发布:js 点击链接 编辑:程序博客网 时间:2024/06/06 08:35
在android 应用开发中,经常是要处理服务接口返回的数据的,因此会将服务器数据(一般为json)转换为Model对象模型,但是有时候会有把一个model的属性值赋值给另一个model属性值的情况,例如一个模块或者方法只要求你传一种对象,其它类型的对象我不要(单一模式),但是你的数据不是要传对象的类型,两个model不是同一个对象类型,但是大多数属性名相同,如属性id等。所以就要有赋值转换了,如下,你是否这样的代码:
model类
class Person{ public String name; public int age; public ...}class Person1{ public String name; public int age; public ...}
Person person=new Person();person.name="aa";person.age=10;//给person1赋值Person1 person1=new Person1();person1.name=person.name;person1.age=person.age;...怎么样,当有很多属性需要这样赋值的时候,你就会有一大堆的
person1.age=person.age;很明显这是不优雅的写法的,看起来也不舒服,当然会有人说为什么不用继承方法,把相同属性放到父model里,这样也可以,不过不方便扩展,也比较复杂,一般服务器数据model类是不应该继承其他类(除Object),嗯,问题说完了,那应该怎么写比较好呢。那就是反射,获取对象A的属性,把值赋给对象B相同的属性名,如name-->name,嗯嗯。。原理就是这样,后来我又想到这种方法的话现有的就有这样方法呀!那就是Gson,gson大家应该都用过,反正我是用这个来解析服务器数据的,非常简单方便,方法如下:
/** * 把modelA对象的属性值赋值给bClass对象的属性。 * @param modelA * @param bClass * @param <T> * @return */public static <A, B> B modelA2B(A modelA, Class<B> bClass) { try { Gson gson = new Gson(); String gsonA = gson.toJson(modelA); B instanceB = gson.fromJson(gsonA, bClass); Log.d(TAG, "modelA2B A=" + modelA.getClass() + " B=" + bClass + " 转换后=" + instanceB); return instanceB; } catch (Exception e) { Log.e(TAG, "modelA2B Exception=" + modelA.getClass() + " " + bClass + " " + e.getMessage()); return null; }}
方法很简单,可以写在Utils类静态方法,方便调用,意思就是把modelA,(A可以是任意object类型)的所有属性值转换为json字符串,再把json字符串转换为Class为bClass的对象,如果对泛型不太熟的话,写成这样也是可以的:
public static <B> B modelA2B(Object modelA, Class<B> bClass) { try { Gson gson = new Gson(); String gsonA = gson.toJson(modelA); B instanceB = gson.fromJson(gsonA, bClass); Log.d(TAG, "modelA2B A=" + modelA.getClass() + " B=" + bClass + " 转换后=" + instanceB); return instanceB; } catch (Exception e) { Log.e(TAG, "modelA2B Exception=" + modelA.getClass() + " " + bClass + " " + e.getMessage()); return null; }}
并返回对象B,就是一个加解析的过程,用法如下:
Person person=new Person();person.name="aa";person.age=10;Person1 person1=Util.modelA2B(person,Person1.class);用法也很简单,传个对象和转换后对象Class就可以了,会把person的相同属性赋值给person1对象,还有如果属性名不同的不会报错,放心使用
如
class Person{ public String name; public int age; public String number; public String phone;}class Person1{ public String name; public long age; public int number;age 的属性名相同,类型不同,但还是可以赋值的,number如果是数字字符串的话“101”也是可以给Person1的number的,这都要归于Gson的强大之处呀!如果属性名不同的话,那就没办法了,只能转换好之后手动赋值了,然后性能问题的话,这个不考虑,为了方便,和基本的也没什么区别public String phone1;}
person.phone="110";Person1 person1=Util.modelA2B(person,Person1.class);person1.phone1=person.phone;这个自己赋值吧,这种情况不多……
有什么不好的地方或疑问还请大家留言回复!谢谢了……
0 0
- android Model对象转换方法,两个实体类对象赋值简便方法
- javabean实体类对象转为Map类型对象的方法
- javabean实体类对象转为Map类型对象的方法
- javabean实体类对象转为Map类型对象的方法
- javabean实体类对象转为Map类型对象的方法
- 根据反射将数据库查询结果Datatable,转换为对应的Model类实体对象
- 实体对象toString()方法的用处
- Smarty赋值对象方法,配置简化封装类
- java继承,子类构造方法赋值给父类对象
- KVC方法快速为数据对象赋值
- JAVA中申请了两个对象,分别在调用方法和声明方法中把其中一个对象直接赋值给另外一个对象,运行结果,求原理。
- c# 利用反射动态给实体类对象赋值
- c# 利用反射动态给实体类对象赋值
- js 定义一个对象并且给对象赋值方法
- js object对象赋值bug和对象复制clone方法
- 对象赋值的方法,直接赋值和对象初始化器赋值
- Android对象对比方法
- 【Class】(1)一共有两种对象,Class对象,实体类对象。(2)Class对象可以得到实体类的所有方法属性
- 再谈Windows下使用DLL
- Android高级UI-listView的原理及优化
- OpenJudge 7624 山区建小学
- HDU--2037今年暑假不AC
- AndroidStudio低版本(1.5)升级到高版本(2.1)之后你可能会遇到的其中一个项目构建问题
- android Model对象转换方法,两个实体类对象赋值简便方法
- Flink安装
- 切换存储文件 (翻译)
- HDU 5259 弹吉他
- 空气测试仪“清心”(2)-整体架构
- 引用计数器
- Web服务启动时自动加载Servlet,并执行service处理
- Git 实用命令总结
- Python自省(反射)----inspect module