最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年09月15日 15:22:16   作者:ouyangjun__  
這篇文章主要介紹了Java List Object[]轉(zhuǎn)換成List T的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

一)背景

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

使用場景:當數(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ù)集合

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

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

實現(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;
 }
}

三)實體類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() {}
 
 /**
  * 構造器
  * 注意: 實體類中必須有無參數(shù)構造器,有參數(shù)構造器,且構造器參數(shù)的順序和數(shù)據(jù)的順序必須一致。如果數(shù)據(jù)格式有變化,需要重新編寫一個實體類的構造器
  */
 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)換打印效果圖:

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

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

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"));
 
  // 第二段:把a1賦值給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,則會編譯報錯
  List<String> b2 = new ArrayList<>();
  // 編譯報錯,這也是List與List<Object>的區(qū)別
  a2 = b2;
 
  // 第三段:把a1賦值給List<Integer>類型的a3,賦值過程沒有編譯報錯,主要為了向前兼容(泛型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);
  // 編譯報錯,不允許add非Integer類型
  a3.add(new Object());
  a3.add(new String("a3"));
 
  // 第四段:把a1賦值給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中添加不同類型的元素,所有功能都可以正常使用,但使用時會有類型強制轉(zhuǎn)換異常的風險。

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

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

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

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

以上內(nèi)容根據(jù)《碼出高效Java開發(fā)手冊》學習整理。希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 在IntelliJ?IDEA中配置SSH服務器開發(fā)環(huán)境并實現(xiàn)固定地址遠程連接的操作方法

    在IntelliJ?IDEA中配置SSH服務器開發(fā)環(huán)境并實現(xiàn)固定地址遠程連接的操作方法

    本文主要介紹如何在IDEA中設置遠程連接服務器開發(fā)環(huán)境,并結合Cpolar內(nèi)網(wǎng)穿透工具實現(xiàn)無公網(wǎng)遠程連接,然后實現(xiàn)遠程Linux環(huán)境進行開發(fā),本例使用的是IDEA2023.2.5版本,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • @scope("prototype") @loadbalanced注解負載均衡失效問題

    @scope("prototype") @loadbalanced注解負載均衡失效問題

    這篇文章主要為大家介紹了@scope("prototype") @loadbalanced注解負載均衡失效問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Springboot Tomcat APR模式詳解和實踐記錄

    Springboot Tomcat APR模式詳解和實踐記錄

    這篇文章主要介紹了Springboot Tomcat APR模式詳解和實踐記錄,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-04-04
  • Java異常(Exception)處理以及常見異常總結

    Java異常(Exception)處理以及常見異常總結

    在《Java編程思想》中這樣定義異常,阻止當前方法或作用域繼續(xù)執(zhí)行的問題,雖然java中有異常處理機制,但是要明確一點,決不應該用"正常"的態(tài)度來看待異常,這篇文章主要給大家介紹了關于Java異常(Exception)處理以及常見異常的相關資料,需要的朋友可以參考下
    2021-10-10
  • 詳解MyBatis中column屬性的總結

    詳解MyBatis中column屬性的總結

    在MyBatis的映射中有column這么一個屬性,我一直以為它映射的是數(shù)據(jù)庫表中的列名,但經(jīng)過學習發(fā)現(xiàn)他似乎映射的是SQL語句中的列名,或者說是查詢結果所得到的表的列名,這篇文章主要介紹了MyBatis中column屬性的總結,需要的朋友可以參考下
    2022-09-09
  • Java實戰(zhàn)項目 健身管理系統(tǒng)

    Java實戰(zhàn)項目 健身管理系統(tǒng)

    本文是一個Java語言編寫的實戰(zhàn)項目,是一個健身管理系統(tǒng),主要用到了ssm+springboot等技術,技術含量筆記高,感興趣的童鞋跟著小編往下看吧
    2021-09-09
  • Spring Cloud Consul的服務注冊與發(fā)現(xiàn)

    Spring Cloud Consul的服務注冊與發(fā)現(xiàn)

    這篇文章主要介紹了Spring Cloud Consul服務注冊與發(fā)現(xiàn)的實現(xiàn)方法,幫助大家更好的理解和學習使用spring框架,感興趣的朋友可以了解下
    2021-02-02
  • Springboot Vue可配置調(diào)度任務實現(xiàn)示例詳解

    Springboot Vue可配置調(diào)度任務實現(xiàn)示例詳解

    這篇文章主要為大家介紹了Springboot Vue可配置調(diào)度任務實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 在windows下揪出java程序占用cpu很高的線程并完美解決

    在windows下揪出java程序占用cpu很高的線程并完美解決

    這篇文章主要介紹了在windows下揪出java程序占用cpu很高的線程并完美解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 解決IDEA中pom.xml文件變?yōu)榛疑膯栴}

    解決IDEA中pom.xml文件變?yōu)榛疑膯栴}

    這篇文章主要給大家介紹了如何解決IDEA中pom.xml文件變?yōu)榛疑膯栴},文中通過圖文結合給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12

最新評論

广丰县| 霍林郭勒市| 汾阳市| 福清市| 阿拉善左旗| 永定县| 玉龙| 常德市| 湖州市| 吴忠市| 江永县| 红桥区| 烟台市| 格尔木市| 平江县| 枝江市| 马龙县| 鄂托克前旗| 庄河市| 湖北省| 九龙县| 双江| 抚顺市| 黎城县| 乌兰浩特市| 南皮县| 苍南县| 长兴县| 镇沅| 柳江县| 平昌县| 江川县| 上饶市| 米泉市| 元氏县| 吕梁市| 石门县| 时尚| 子长县| 蒙自县| 张掖市|