摘要:有人問以下情況如何得到泛型參數(shù)的實(shí)際類型由于的類型擦除,沒有辦法獲取,不知道它被賦予了。但可以變通一下對(duì)應(yīng)的類定義是這里知道了實(shí)際類型等基于的語言具有,能方便地獲取實(shí)際類型。
有人問以下情況如何得到泛型參數(shù)的實(shí)際類型:
APIService api = new APIService();
由于Java的類型擦除,沒有辦法獲取,APIService不知道它被賦予了User。
但可以變通一下:
APIService api = APIService.create(User.class);
對(duì)應(yīng)的類定義是:
public class APIService{ public static APIService create(Class cls) { return new APIService(cls); } public APIService(Class cls) { //這里知道了實(shí)際類型cls } }
Kotlin, Scala等基于JVM的語言具有reified generics,能方便地獲取實(shí)際類型。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65085.html
摘要:泛型類在類的申明時(shí)指定參數(shù),即構(gòu)成了泛型類。換句話說,泛型類可以看成普通類的工廠。的作用就是指明泛型的具體類型,而類型的變量,可以用來創(chuàng)建泛型類的對(duì)象。只有聲明了的方法才是泛型方法,泛型類中的使用了泛型的成員方法并不是泛型方法。 什么是泛型? 泛型是JDK 1.5的一項(xiàng)新特性,它的本質(zhì)是參數(shù)化類型(Parameterized Type)的應(yīng)用,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù),...
摘要:接口也是集合中的一員,但它與接口有所不同,接口與接口主要用于存儲(chǔ)元素,而主要用于迭代訪問即遍歷中的元素,因此對(duì)象也被稱為迭代器。迭代器的實(shí)現(xiàn)原理我們?cè)谥鞍咐呀?jīng)完成了遍歷集合的整個(gè)過程。 【Collection、泛型】 主要內(nèi)容 Collection集合 迭代器 增強(qiáng)for 泛型 教學(xué)目標(biāo) [ ] 能夠說出集合與數(shù)組的區(qū)別 [ ] 說出Collection集合的常用功能 [ ]...
摘要:回到的第二方法的用法,通過上面的分析,我們可以知道,方法其實(shí)也是用來獲取泛型的實(shí)際類型的,這樣就可以將響應(yīng)反序列化為帶泛型的類型了。在很多反序列化的開源組件中,都用了這個(gè)原理例如的方法,所以我們會(huì)經(jīng)常見到實(shí)例化的時(shí)候會(huì)多個(gè)花括號(hào)。 前段日子在使用google-http-client.jar 這個(gè)組件做http請(qǐng)求時(shí),發(fā)現(xiàn)一件有趣的事情,具體代碼如下: try { ...
摘要:靜態(tài)變量是被泛型類的所有實(shí)例所共享的。所以引用能完成泛型類型的檢查。對(duì)于這個(gè)類型系統(tǒng),有如下的一些規(guī)則相同類型參數(shù)的泛型類的關(guān)系取決于泛型類自身的繼承體系結(jié)構(gòu)。事實(shí)上,泛型類擴(kuò)展都不合法。 前言 和C++以模板來實(shí)現(xiàn)靜多態(tài)不同,Java基于運(yùn)行時(shí)支持選擇了泛型,兩者的實(shí)現(xiàn)原理大相庭徑。C++可以支持基本類型作為模板參數(shù),Java卻只能接受類作為泛型參數(shù);Java可以在泛型類的方法中取得...
閱讀 3341·2021-11-22 14:44
閱讀 2551·2019-08-30 14:10
閱讀 2610·2019-08-30 13:12
閱讀 1227·2019-08-29 18:36
閱讀 1352·2019-08-29 16:16
閱讀 3340·2019-08-26 10:33
閱讀 1770·2019-08-23 18:16
閱讀 389·2019-08-23 18:12