第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Java:如何從泛型類型中獲得類文字?

Java:如何從泛型類型中獲得類文字?

動(dòng)漫人物 2019-08-03 07:03:50
Java:如何從泛型類型中獲得類文字?通常,我看到人們使用類文字如下:Class<Foo> cls = Foo.class;但是,如果類型是通用的,例如列表呢?這很好,但是有一個(gè)警告,因?yàn)長(zhǎng)ist應(yīng)該參數(shù)化:Class<List> cls = List.class那么為什么不添加一個(gè)<?>?這會(huì)導(dǎo)致類型錯(cuò)配錯(cuò)誤:Class<List<?>> cls = List.class我想像這樣的東西會(huì)起作用,但這只是簡(jiǎn)單的語(yǔ)法錯(cuò)誤:Class<List<Foo>> cls = List<Foo>.class我怎么才能得到Class<List<Foo>>靜態(tài)的,例如使用類文字?I 能使用@SuppressWarnings("unchecked")為了消除第一個(gè)示例中由于非參數(shù)化使用List引起的警告,Class<List> cls = List.class但我不想。有什么建議嗎?
查看完整描述

3 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊

你不能因?yàn)?/trans>類型擦除.

Java泛型只不過(guò)是對(duì)象類型的語(yǔ)法糖而已。展示:

List<Integer> list1 = new ArrayList<Integer>();List<String> list2 = (List<String>)list1;list2.add("foo"); // perfectly legal

在運(yùn)行時(shí)保留泛型類型信息的唯一實(shí)例是Field.getGenericType()如果通過(guò)反思審問(wèn)一個(gè)班級(jí)的成員。

所有這些都是為什么Object.getClass()有這樣的簽名:

public final native Class<?> getClass();

重要的是Class<?>.

換句話說(shuō),從Java泛型常見問(wèn)題:

為什么沒有具體參數(shù)化類型的類文字?

因?yàn)閰?shù)化類型沒有精確的運(yùn)行時(shí)類型表示。

類文字表示Class表示給定類型的。例如,類文字String.class表示Class表示類型的String并且與Class方法時(shí)返回的getClassString對(duì)象。類文字可用于運(yùn)行時(shí)類型檢查和反射。

在名為類型擦除的過(guò)程中,參數(shù)化類型在編譯過(guò)程中被轉(zhuǎn)換為字節(jié)碼時(shí),會(huì)丟失它們的類型參數(shù)。作為類型擦除的副作用,泛型類型的所有實(shí)例化都共享相同的運(yùn)行時(shí)表示,即對(duì)應(yīng)的原始類型的運(yùn)行時(shí)表示。換句話說(shuō),參數(shù)化類型沒有它們自己的類型表示形式。因此,沒有必要形成類文字,例如List<String>.class , List<Long>.classList<?>.class,因?yàn)闆]有Class物體存在。只有原始類型List有一個(gè)Class表示其運(yùn)行時(shí)類型的。它被稱為List.class.


查看完整回答
反對(duì) 回復(fù) 2019-08-05
  • 3 回答
  • 0 關(guān)注
  • 378 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)