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);
//工具类
Listlist=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没有区别
Lista2=a1;
a2.add(newObject());
a2.add(newInteger(2));
a2.add(newString("a2"));
//但是如果尝试把一个带有其它类型泛型的b2赋值给a2,则会编译报错
Listb2=newArrayList<>();
//编译报错,这也是List与List的区别
a2=b2;
//第三段:把a1赋值给List类型的a3,赋值过程没有编译报错,主要为了向前兼容(泛型jdk1.5之后才出现)
Lista3=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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。