Object類型轉換成自定義類型(向下轉型)


Object類型轉換成自定義類型

場景:

  從數據庫或者別的途徑接收對象的時候用Object,但是用的時候怎么object點(方法提示 | alt+'/'),都點不出自定義類型的方法。

  比如,數據庫查詢Customer的時候,用Object來接收,那么想要調用Customer中的getCust_Id()方法,你會發現用Object怎么都點不出來。我之前頭疼了很多次,今天做小demo,又碰巧用object接收,運氣好的是這次我貌似琢磨出怎么轉型了。

 

1.轉型前(查詢出來每條數據由一個Customer對象和Order對象組成,但是用的是Object接收)

  (普通內連接提到的是前兩章學習Hibernate的總結(Hibernate(十三)迫切內連接fetch)

/** * 普通內連接 */ @Test public void fun(){ Session session = HibernateUtils.getSession(); Transaction tx = session.beginTransaction(); List<Object[]> list = session.createQuery("from Customer cst inner join cst.ods").list(); for (Object[] objects : list) { System.out.println(Arrays.toString(objects)); } tx.commit(); session.close(); }

2.向下轉型后(將接收的兩個Object對象分別向下轉型為Customer和Order對象)

/** * object類型轉換成自定義實體類型 */ @Test public void fun2(){ Session session = HibernateUtils.getSession(); Transaction tx = session.beginTransaction(); //查詢用戶(因為是普通內連接,所以會每一條數據會封裝成兩個對象,一個是Customer,一個是Order)
        List<Object[]> list = session.createQuery("from Customer cst inner join cst.ods").list(); System.out.println("--------------------------------------------------------------------------------------------------------"); for (Object[] objects : list) { //這里的length是其實就是2
            for(int i = 0;i < objects.length;i++){ //如果第i個對象是Customer的實例
                if (objects[i] instanceof Customer) { //就實例化Customer對象,將第一個object對象向下轉型
                    Customer c = (Customer) objects[i]; //打印Customer對象中的屬性
                    System.out.println("用戶ID:" + c.getCust_id() + "\t" + "用戶名:" + c.getCust_name()); //后面就不需要執行了
                    continue; }else if(objects[i] instanceof Order){ Order od = (Order)objects[i]; System.out.println("訂單編號:" + od.getOrder_id() + "\t" + "訂單明細編號:" + od.getDetail_id()); continue; }else{ System.out.println("object[" + i + "]" + "不是Customer的實例也不是Order的實例~"); } } System.out.println("--------------------------------------------------------------------------------------------------------"); } tx.commit(); session.close(); }

部分查詢結果:

 

總結:首先,我感覺我有很多詞匯用的不恰當或者概念理解錯誤,比如,這個應該是向下轉型把....

   想明白了還挺開心的(雖然問題有點弱智...),然后再轉型之前加上了判斷是否是這個類型(instanceof),保證了程序的合理性。

     想到剛剛在哪里,什么Class.forName,什么newInstance,getMethod在哪里瞎鼓搗反射就無語...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM