国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

java中在哪些情況下需要使用泛型通配符如:? extends T 或者 ? super T

瀏覽:132日期:2024-01-30 18:00:12

問題描述

至于什么是泛型通配符,我是知道的,但是不知道具體在項(xiàng)目里的使用場(chǎng)景,比如哪些情況下,我們創(chuàng)建的類或者接口需要用到泛型通配符呢

問題解答

回答1:

記住 Effective Java 一書中的這句話:Producer Extends, Consumer Super 。這里講得很詳細(xì):http://stackoverflow.com/ques...

補(bǔ)充

TreeMap有個(gè)構(gòu)造函數(shù):

public TreeMap(Comparator<? super K> comparator);

可以想想為什么要指定類型Comparator<? super K>,而不是Comparator<K>或Comparator<? extends K>?

回答2:

我不寫Java,但所有的泛型都是相通的。正好我此時(shí)在看淘寶OPEN的SDK,這是一個(gè)最好來解釋泛型通配符最好的真實(shí)示例了。

我特意找了一份Java版本的SDK,見:https://github.com/ggd543/tao...

-- url: https://github.com/ggd543/taobao-sdk-java/blob/master/src/main/java/com/taobao/api/TaobaoClient.java/** * 執(zhí)行TOP公開API請(qǐng)求。 * @param <T> * @param request 具體的TOP請(qǐng)求 * @return * @throws ApiException */public <T extends TaobaoResponse> T execute(TaobaoRequest<T> request) throws ApiException ;

所有API請(qǐng)求都是通過 execute 來操作的,而這個(gè)方法就采用的 ? extends T 通配符上界,來限制返回的對(duì)象必須是 TaobaoResponse 的子類。

簡(jiǎn)單點(diǎn)說就是約束。

那從淘寶SDK的角度來看,通配符上界最大的價(jià)值是淘寶所有SDK請(qǐng)求返回的結(jié)果都會(huì)帶有一個(gè) code、msg 等一些通用的參數(shù)來表示API的請(qǐng)求狀態(tài)。

那好,我們回過頭來看 execute 的具體實(shí)現(xiàn):

if(this.needCheckRequest==true){ try{request.check();//if check failed,will throw ApiRuleException. }catch(ApiRuleException e){T localResponse=null;try { localResponse=request.getResponseClass().newInstance();} catch (InstantiationException e2) { throw new ApiException(e2);} catch (IllegalAccessException e3) { throw new ApiException(e3);}localResponse.setErrorCode(e.getErrCode());localResponse.setMsg(e.getErrMsg());//localResponse.setBody('this.');return localResponse; }}

注意到這里的 catch 體中 localResponse,他的類型 T,但這個(gè)T并不是簡(jiǎn)單的一個(gè)Object對(duì)象,由于前面已經(jīng)限定 T 的類型必須是 TaobaoResponse 的子類。

那就意味者,當(dāng)對(duì) T 進(jìn)行實(shí)例后,其類型至少是 TaobaoResponse 的子類,而對(duì)于 TaobaoResponse 的定義是這樣的:

-- url: https://github.com/ggd543/taobao-sdk-java/blob/master/src/main/java/com/taobao/api/TaobaoResponse.javapublic abstract class TaobaoResponse implements Serializable { private static final long serialVersionUID = 5014379068811962022L; @ApiField('code') private String errorCode; @ApiField('msg') private String msg; // more}

因此你可以直接看到這樣的代碼:

localResponse.setErrorCode(e.getErrCode());

瞧,是不是很有意思,所有通用參數(shù)都可以統(tǒng)一進(jìn)行處理。

那么從淘寶SDK的角度來講,而泛型通配符的意義就在于此了。

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 亚洲九九夜夜 | 国产成人一级 | 国产成人精品一区二区秒拍 | 欧美一区二区视频 | 久久精品久久精品 | 久久中文字幕亚洲精品最新 | 国产a一级毛片含羞草传媒 国产a自拍 | 欧美国产日韩久久久 | 中文字幕一区二区三区亚洲精品 | 久久久久久久91精品免费观看 | 亚洲精品国产成人99久久 | 中文字幕在线一区二区在线 | 伊人精品视频 | 特级毛片在线播放 | 国产一区二区三区四区波多野结衣 | 久久伊人免费视频 | 久久精品国产一区二区三区 | 免费岛国小视频在线观看 | 日韩不卡一区二区 | 亚洲欧美不卡中文字幕 | 男女交性拍拍拍高清视频 | 女人张开腿让男人捅视频 | 日本毛片免费看 | 美女黄页黄频 | 国产精品99久久久 | 国产一二三区视频 | 天堂最新版 | 日本高清毛片视频在线看 | 欧美日本视频一区 | 久久久精品国产 | 成年女人毛片免费观看中文w | 午夜免费片在线观看不卡 | 国产一级aaa全黄毛片 | 亚洲综合一区二区不卡 | 欧美成人一级视频 | 国产一级淫片a免费播放口之 | 在线免费观看一级片 | 一本久道综合久久精品 | 国产成人午夜精品免费视频 | 国产三级做爰在线观看∵ | 一级毛片日韩a欧美 |