Java List Object[]转换成List T的实例
一)背景
主要是为了实现数据之间的转换,方便数据展示。
使用场景:当数据可能是List
二)List
功能:传入List
实现方式:Java反射方式,使用的是构造器的方式
缺点:实体类中必须有无参数构造器,有参数构造器,且构造器参数的顺序和数据的顺序必须一致。如果数据格式有变化,需要重新编写一个实体类的构造器
实现源码:
packagecom.oysept.utils; importjava.lang.reflect.Constructor; importjava.util.ArrayList; importjava.util.List; /** *List
三)实体类PhoneVO.java
packagecom.oysept.bean; importjava.io.Serializable; importjava.math.BigDecimal; publicclassPhoneEntityimplementsSerializable{ privatestaticfinallongserialVersionUID=1L; publicPhoneEntity(){} /** *构造器 *注意:实体类中必须有无参数构造器,有参数构造器,且构造器参数的顺序和数据的顺序必须一致。如果数据格式有变化,需要重新编写一个实体类的构造器 */ publicPhoneEntity(Stringplate,BigDecimalnumber,doublememory,doublesize){ super(); this.plate=plate; this.number=String.valueOf(number); this.memory=String.valueOf(memory); this.size=String.valueOf(size); } privateStringplate; privateStringnumber; privateStringmemory; privateStringsize; publicStringgetPlate(){returnplate;} publicvoidsetPlate(Stringplate){this.plate=plate;} publicStringgetNumber(){returnnumber;} publicvoidsetNumber(Stringnumber){this.number=number;} publicStringgetMemory(){returnmemory;} publicvoidsetMemory(Stringmemory){this.memory=memory;} publicStringgetSize(){returnsize;} publicvoidsetSize(Stringsize){this.size=size;} }
四)数据转换测试类
packagecom.oysept.test; importjava.math.BigDecimal; importjava.util.ArrayList; importjava.util.List; importcom.oysept.bean.PhoneEntity; importcom.oysept.utils.ObjectToBeanUtils; /** *测试类 *@authorouyangjun */ publicclassObjectToBeanTest{ publicstaticvoidmain(String[]args)throwsException{ //初始化数据 Object[]obj=newObject[4]; obj[0]="hw"; obj[1]=BigDecimal.valueOf(13699999999L); obj[2]=4.7; obj[3]=5.0; Object[]obj1=newObject[4]; obj1[0]="vivo"; obj1[1]=BigDecimal.valueOf(13611111111L); obj1[2]=4.8; obj1[3]=5.7; ListobjList=newArrayList (); objList.add(obj); objList.add(obj1); //工具类 List list=ObjectToBeanUtils.objectToBean(objList,PhoneEntity.class); for(PhoneEntityphone:list){ System.out.println(phone.getPlate()+"\t"+phone.getNumber() +"\t"+phone.getMemory()+"\t"+phone.getSize()); } } }
数据转换打印效果图:
补充知识:List、List<Object>、List<?>的区别
通过一个例子来比较这几种写法的区别
publicclassListWithoutGeneric{ publicstaticvoidmain(String[]args){ //第一段:不使用泛型的方式 Lista1=newArrayList(); a1.add(newObject()); a1.add(newInteger(1)); a1.add(newString("a1")); //第二段:把a1赋值给List类型的a2,看似a2与a1没有区别 List a2=a1; a2.add(newObject()); a2.add(newInteger(2)); a2.add(newString("a2")); //但是如果尝试把一个带有其它类型泛型的b2赋值给a2,则会编译报错 List b2=newArrayList<>(); //编译报错,这也是List与List 的区别 a2=b2; //第三段:把a1赋值给List 类型的a3,赋值过程没有编译报错,主要为了向前兼容(泛型jdk1.5之后才出现) List a3=a1; a3.add(newInteger(3)); //java.lang.ClassCastException:java.lang.Objectcannotbecasttojava.lang.Integer Integerinteger=a3.get(0); //编译报错,不允许add非Integer类型 a3.add(newObject()); a3.add(newString("a3")); //第四段:把a1赋值给List>类型的a4 List>a4=a1; a4.remove(0); a4.clear(); a4.add(null); //编译出错,不允许add非null的数据 a4.add(newObject()); } }
1、第一段:定义了一个没使用泛型的Lista1,向a1中添加不同类型的元素,所有功能都可以正常使用,但使用时会有类型强制转换异常的风险。
2、第二段:把a1赋值给List
这也是List与List
3、第三段:把a1赋值给List
4、List>是通配符集合,一般作为参数来接收外部的集合,或者返回一个不知道具体元素类型的集合。它可以被任何类型的集合引用赋值,也可以删除元素。但是因为类型的不确定,所有不能添加非null元素(null属于任何类型)。
以上内容根据《码出高效Java开发手册》学习整理。希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。