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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有關(guān)java泛型中一段簡單代碼 擦除知識點(diǎn)的疑問

有關(guān)java泛型中一段簡單代碼 擦除知識點(diǎn)的疑問

皈依舞 2019-03-06 15:15:16
下面這個程序中T 類型不是被擦除了嗎?為什么使用get ( ) 方法不需要類型裝換? (不適用泛型的簡單代碼就需要加(String) 來實(shí)現(xiàn)類型轉(zhuǎn)換)擦除知識點(diǎn)在實(shí)際編程中體現(xiàn)的多嗎?代碼如下:public class GenericHolder<T> {  private T obj;  public void set(T obj) { this.obj = obj; }  public T get() { return obj; }  public static void main(String[] args) {    GenericHolder<String> holder =      new GenericHolder<String>();    holder.set("Item");    String s = holder.get();  }}public class SimpleHolder {  private Object obj;  public void set(Object obj) { this.obj = obj; }  public Object get() { return obj; }  public static void main(String[] args) {    SimpleHolder holder = new SimpleHolder();    holder.set("Item");    String s = (String)holder.get();  }}
查看完整描述

6 回答

?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個贊

擦除是指運(yùn)行時在泛型類內(nèi)部無法得到有關(guān)泛型參數(shù)的任何信息, 如果指定了邊界,泛型變量的實(shí)際類型就是邊界,樓主示例中的代碼沒有指定邊界, 所以擦出到Object, 也就是obj實(shí)際運(yùn)行時的類型為Object, 之所以使用get()方法不需要強(qiáng)制類型轉(zhuǎn)換, 是因?yàn)榫幾g期在編譯時幫你生成了轉(zhuǎn)換的代碼, 如果我沒記錯的話, 大概處理之后的情況和示例2的main方法中的String s = (String)holder.get()類似, 詳細(xì)的樓主可以用javap 反編譯查看.

對于第二個問題, 我覺著這就和看不看源碼是一個道理, 不看也不影響編程, 但是看過之后明白了, 寫起來會很得心應(yīng)手, 我還是學(xué)生, 實(shí)際編程的情況就不知道啦, 一點(diǎn)點(diǎn)看法~


查看完整回答
反對 回復(fù) 2019-04-17
?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個贊

泛型只在源碼中體現(xiàn),編譯后等同于你舉例的后者。所以pubic void test(List<String> list)和public void test(List<Integer> list)不能實(shí)現(xiàn)重載。


查看完整回答
反對 回復(fù) 2019-04-17
?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個贊

  1. 擦除是在編譯期擦除,將 java 文件編譯為 class 文件時擦除。java 的泛型,可以看成一種語法糖,使得我們在書寫java代碼時更安全便捷。

  2. 擦除在實(shí)際工作中沒有用到,擦除可以認(rèn)為是泛型語法糖在編譯期的一種解釋動作。


查看完整回答
反對 回復(fù) 2019-04-17
?
瀟瀟雨雨

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

1.首先,擦除通俗的說是指泛型標(biāo)簽是交給Javac編譯器去執(zhí)行的,并起作用的。 代碼過完編譯期,運(yùn)行期間就不管了《T》,在class文件找不到T了。 這里你顯示了指明了類型是<String>,那么編譯器會在編譯期間將GenericHolder中持有的T轉(zhuǎn)換成String類型。 所以你的get不用轉(zhuǎn)型了(編譯器已經(jīng)把String識別出來了)。

2.擦除是泛型中很重要的概念,可以說不懂擦除就不懂泛型。實(shí)際工作中有常見有關(guān)聯(lián)的是對象的序列化反序列化,如gson等框架中會用到。


查看完整回答
反對 回復(fù) 2019-04-17
?
精慕HU

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個贊

GenericHolder<String> 中的


private T obj;

public void set(T obj) { this.obj = obj; }

public T get() { return obj; }

相當(dāng)于


private Object obj;

public void set(Object obj) { this.obj = obj; }

public Object get() { return (Object) obj; }

...

String s = (String) holder.get();

其實(shí)就是個語法糖


查看完整回答
反對 回復(fù) 2019-04-17
  • 6 回答
  • 0 關(guān)注
  • 393 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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