中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何分析Java反射給泛型集合賦值問題

發布時間:2022-01-15 10:19:27 來源:億速云 閱讀:277 作者:柒染 欄目:開發技術

今天給大家介紹一下如何分析Java反射給泛型集合賦值問題。文章的內容小編覺得不錯,現在給大家分享一下,覺得有需要的朋友可以了解一下,希望對大家有所幫助,下面跟著小編的思路一起來閱讀吧。

泛型

Java泛型簡單描述下:

比如創建一個List集合,我想在里邊只放Student對象信息,就需要寫成

List<Student> studentList = new ArrayList();

這個時候List里面就只能放入Student類型的值,如果強行放入其他類型(比如說Integer)的就會提示錯誤信息:

java.lang.ClassCastException: java.lang.Integer cannot be cast to com.entity.Student

按照這個結果來看,studentList里面就只能放入Student類型的值,沒有什么問題。

然后,奇怪的事情發生了,在公司項目的log里發現了一個error:

java.lang.ClassCastException: java.lang.Integer cannot be cast to com.entity.Student

原代碼類似于:

Student student = studentList.get(0);

What? 集合創建的時候明明給的泛型是Student啊,這個String是哪蹦出來的。

這個時候又得提出一個概念:

反射

比較全面的解釋:

JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
要想解剖一個類,必須先要獲取到該類的字節碼文件對象。而解剖使用的就是Class類中的方法.所以先要獲取到每一個字節碼文件對應的Class類型的對象.

一通debug,我發現了這么一段代碼(來自于hutools包內的某個方法中,詳細是哪個記不太清了,模仿著寫寫):

    Class<? extends List> aClass = list.getClass();
        Method method = aClass.getMethod("add", Object.class);
        for (Object o : arg) {
            method.invoke(list, o);
        }
        return list;
    }

差不多就這樣子,入參是[1,2,3,4]和studentList,在外邊取list中的值時,發現:

java.lang.ClassCastException: java.lang.Integer cannot be cast to com.entity.Student

這玩意,利用反射獲取了List的add方法,值類型也不判斷,直接給塞進集合里了。。。。

其實剛開始碰到時,一臉懵的,耗費了很長時間取排查問題,我泛型Student的List,怎么會出現這種問題,從List中取出來的值不能轉換成Student。。。。

不過后來發現原因之后,感覺其實也不復雜,挺簡單的,還是經驗太少,判斷錯誤能力不行,共勉。

上面的代碼用的Student類和String、Integer代替,公司內部代碼就不透露了。

以上就是如何分析Java反射給泛型集合賦值問題的全部內容了,更多與如何分析Java反射給泛型集合賦值問題相關的內容可以搜索億速云之前的文章或者瀏覽下面的文章進行學習哈!相信小編會給大家增添更多知識,希望大家能夠支持一下億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扶绥县| 镇原县| 全椒县| 团风县| 金湖县| 昆明市| 积石山| 彩票| 夏津县| 高邑县| 柘荣县| 札达县| 滨州市| 荥阳市| 壤塘县| 射洪县| 白水县| 望谟县| 浦县| 喜德县| 石阡县| 澄迈县| 陆河县| 丹江口市| 绍兴市| 和硕县| 新宁县| 颍上县| 安塞县| 来安县| 陆丰市| 同心县| 商河县| 银川市| 池州市| 龙川县| 囊谦县| 道真| 潍坊市| 武汉市| 湛江市|