电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Java List Object[]轉(zhuǎn)換成List T的實(shí)例

瀏覽:49日期:2022-08-24 16:09:50

一)背景

主要是為了實(shí)現(xiàn)數(shù)據(jù)之間的轉(zhuǎn)換,方便數(shù)據(jù)展示。

使用場景:當(dāng)數(shù)據(jù)可能是List<Object[]>類型,可能會需要轉(zhuǎn)換成具體的List<Class>格式。

二)List<Object[]>轉(zhuǎn)換成List<T>

功能:傳入List<Object[]>數(shù)據(jù)和需要轉(zhuǎn)換的Class對象,返回一個List<Class>數(shù)據(jù)集合

實(shí)現(xiàn)方式:Java反射方式,使用的是構(gòu)造器的方式

缺點(diǎn):實(shí)體類中必須有無參數(shù)構(gòu)造器,有參數(shù)構(gòu)造器,且構(gòu)造器參數(shù)的順序和數(shù)據(jù)的順序必須一致。如果數(shù)據(jù)格式有變化,需要重新編寫一個實(shí)體類的構(gòu)造器

實(shí)現(xiàn)源碼:

package com.oysept.utils; import java.lang.reflect.Constructor;import java.util.ArrayList;import java.util.List; /** * List<Object[]>轉(zhuǎn)換成一個List<T> * @author ouyangjun */public class ObjectToBeanUtils { /** * 把List<Object[]>轉(zhuǎn)換成List<T> */ public static <T> List<T> objectToBean(List<Object[]> objList, Class<T> clz) throws Exception{ if (objList==null || objList.size()==0) { return null; } Class<?>[] cz = null; Constructor<?>[] cons = clz.getConstructors(); for (Constructor<?> ct : cons) { Class<?>[] clazz = ct.getParameterTypes(); if (objList.get(0).length == clazz.length) { cz = clazz; break; } } List<T> list = new ArrayList<T>(); for (Object[] obj : objList) { Constructor<T> cr = clz.getConstructor(cz); list.add(cr.newInstance(obj)); } return list; }}

三)實(shí)體類PhoneVO.java

package com.oysept.bean; import java.io.Serializable;import java.math.BigDecimal; public class PhoneEntity implements Serializable { private static final long serialVersionUID = 1L; public PhoneEntity() {} /** * 構(gòu)造器 * 注意: 實(shí)體類中必須有無參數(shù)構(gòu)造器,有參數(shù)構(gòu)造器,且構(gòu)造器參數(shù)的順序和數(shù)據(jù)的順序必須一致。如果數(shù)據(jù)格式有變化,需要重新編寫一個實(shí)體類的構(gòu)造器 */ public PhoneEntity(String plate, BigDecimal number, double memory, double size) { super(); this.plate = plate; this.number = String.valueOf(number); this.memory = String.valueOf(memory); this.size = String.valueOf(size); } private String plate; private String number; private String memory; private String size; public String getPlate() { return plate; } public void setPlate(String plate) { this.plate = plate; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getMemory() { return memory; } public void setMemory(String memory) { this.memory = memory; } public String getSize() { return size; } public void setSize(String size) { this.size = size;}}

四)數(shù)據(jù)轉(zhuǎn)換測試類

package com.oysept.test; import java.math.BigDecimal;import java.util.ArrayList;import java.util.List; import com.oysept.bean.PhoneEntity;import com.oysept.utils.ObjectToBeanUtils; /** * 測試類 * @author ouyangjun */public class ObjectToBeanTest { public static void main(String[] args) throws Exception { // 初始化數(shù)據(jù) Object[] obj = new Object[4]; obj[0] = 'hw'; obj[1] = BigDecimal.valueOf(13699999999L); obj[2] = 4.7; obj[3] = 5.0; Object[] obj1 = new Object[4]; obj1[0] = 'vivo'; obj1[1] = BigDecimal.valueOf(13611111111L); obj1[2] = 4.8; obj1[3] = 5.7; List<Object[]> objList = new ArrayList<Object[]>(); objList.add(obj); objList.add(obj1); // 工具類 List<PhoneEntity> list = ObjectToBeanUtils.objectToBean(objList, PhoneEntity.class); for (PhoneEntity phone : list) { System.out.println(phone.getPlate() + 't' + phone.getNumber() + 't' + phone.getMemory() + 't' + phone.getSize()); } }}

數(shù)據(jù)轉(zhuǎn)換打印效果圖:

Java List Object[]轉(zhuǎn)換成List T的實(shí)例

補(bǔ)充知識:List、List<Object>、List<?>的區(qū)別

通過一個例子來比較這幾種寫法的區(qū)別

Java List Object[]轉(zhuǎn)換成List T的實(shí)例

public class ListWithoutGeneric { public static void main(String[] args) { // 第一段:不使用泛型的方式 List a1 = new ArrayList(); a1.add(new Object()); a1.add(new Integer(1)); a1.add(new String('a1')); // 第二段:把a(bǔ)1賦值給List<Object>類型的a2,看似a2與a1沒有區(qū)別 List<Object> a2 = a1; a2.add(new Object()); a2.add(new Integer(2)); a2.add(new String('a2')); // 但是如果嘗試把一個帶有其它類型泛型的b2賦值給a2,則會編譯報(bào)錯 List<String> b2 = new ArrayList<>(); // 編譯報(bào)錯,這也是List與List<Object>的區(qū)別 a2 = b2; // 第三段:把a(bǔ)1賦值給List<Integer>類型的a3,賦值過程沒有編譯報(bào)錯,主要為了向前兼容(泛型jdk1.5之后才出現(xiàn)) List<Integer> a3 = a1; a3.add(new Integer(3)); // java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.Integer Integer integer = a3.get(0); // 編譯報(bào)錯,不允許add非Integer類型 a3.add(new Object()); a3.add(new String('a3')); // 第四段:把a(bǔ)1賦值給List<?>類型的a4 List<?> a4 = a1; a4.remove(0); a4.clear(); a4.add(null); // 編譯出錯,不允許add非null的數(shù)據(jù) a4.add(new Object()); }}

1、第一段:定義了一個沒使用泛型的List a1,向a1中添加不同類型的元素,所有功能都可以正常使用,但使用時會有類型強(qiáng)制轉(zhuǎn)換異常的風(fēng)險。

2、第二段:把a(bǔ)1賦值給List<Object>類型的a2,再往a2添加不同類型元素,不會編譯報(bào)錯,看似a2與a1沒有區(qū)別,但是如果嘗試把一個帶有其它類型泛型(List<String>)的b2賦值給a2,則會編譯報(bào)錯,除非讓泛型保持一致。

這也是List與List<Object>的區(qū)別:泛型之間只有同類型才能相互賦值。

3、第三段:把a(bǔ)1賦值給List<Integer>類型的a3,賦值過程沒有編譯報(bào)錯,主要為了向前兼容(泛型jdk1.5之后才出現(xiàn)),但如果直接用Integer類型取值,會報(bào)類型轉(zhuǎn)換異常。因?yàn)閍3有了泛型約束,再添加其它類型元素,則會編譯報(bào)錯。

4、List<?>是通配符集合,一般作為參數(shù)來接收外部的集合,或者返回一個不知道具體元素類型的集合。它可以被任何類型的集合引用賦值,也可以刪除元素。但是因?yàn)轭愋偷牟淮_定,所有不能添加非null元素(null屬于任何類型)。

以上內(nèi)容根據(jù)《碼出高效Java開發(fā)手冊》學(xué)習(xí)整理。希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 广东成考网-广东成人高考网| 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 成都顶呱呱信息技术有限公司-贷款_个人贷款_银行贷款在线申请 - 成都贷款公司 | 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 | 防爆正压柜厂家_防爆配电箱_防爆控制箱_防爆空调_-盛通防爆 | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 一体化污水处理设备-一体化净水设备-「山东梦之洁水处理」 | 铆钉机|旋铆机|东莞旋铆机厂家|鸿佰专业生产气压/油压/自动铆钉机 | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | 深圳侦探联系方式_深圳小三调查取证公司_深圳小三分离机构 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 拉力机-万能试验机-材料拉伸试验机-电子拉力机-拉力试验机厂家-冲击试验机-苏州皖仪实验仪器有限公司 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 衡阳耐适防护科技有限公司——威仕盾焊接防护用品官网/焊工手套/焊接防护服/皮革防护手套 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 上海盐水喷雾试验机_两厢式冷热冲击试验箱-巨怡环试 | 沉降天平_沉降粒度仪_液体比重仪-上海方瑞仪器有限公司 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 没斑啦-专业的祛斑美白嫩肤知识网站-去斑经验分享 | 北京包装设计_标志设计公司_包装设计公司-北京思逸品牌设计 | 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 回转炉,外热式回转窑,回转窑炉-淄博圣元窑炉工程有限公司 | 吹田功率计-长创耐压测试仪-深圳市新朗普电子科技有限公司 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 卸料器-卸灰阀-卸料阀-瑞安市天蓝环保设备有限公司 | 粘度计NDJ-5S,粘度计NDJ-8S,越平水分测定仪-上海右一仪器有限公司 | 水热合成反应釜-防爆高压消解罐-西安常仪仪器设备有限公司 | 数控走心机-双主轴走心机厂家-南京建克| 泰国专线_泰国物流专线_广州到泰国物流公司-泰廊曼国际 | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 工程管道/塑料管材/pvc排水管/ppr给水管/pe双壁波纹管等品牌管材批发厂家-河南洁尔康建材 |