亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

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

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

問題描述

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

問題解答

回答1:

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

補充

TreeMap有個構造函數:

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

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

回答2:

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

我特意找了一份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/** * 執行TOP公開API請求。 * @param <T> * @param request 具體的TOP請求 * @return * @throws ApiException */public <T extends TaobaoResponse> T execute(TaobaoRequest<T> request) throws ApiException ;

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

簡單點說就是約束。

那從淘寶SDK的角度來看,通配符上界最大的價值是淘寶所有SDK請求返回的結果都會帶有一個 code、msg 等一些通用的參數來表示API的請求狀態。

那好,我們回過頭來看 execute 的具體實現:

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,但這個T并不是簡單的一個Object對象,由于前面已經限定 T 的類型必須是 TaobaoResponse 的子類。

那就意味者,當對 T 進行實例后,其類型至少是 TaobaoResponse 的子類,而對于 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());

瞧,是不是很有意思,所有通用參數都可以統一進行處理。

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

標簽: java
相關文章:
主站蜘蛛池模板: 国产97公开成人免费视频 | 你懂的网站在线 | 亚洲特黄| 欧美高清性色生活片免费观看 | 巨胸美女扒开腿让我爽 | 999久久久精品视频在线观看 | 天天做天天爱天天影视综合 | aaa毛片手机在线现看 | 欧美大陆日韩一区二区三区 | 久久不卡视频 | 亚洲性图视频 | 色偷偷亚洲第一成人综合网址 | 婷婷六月久久综合丁香76 | 久久中文字幕久久久久 | 久久久久久久国产精品 | 国产福利视频在线播放 | 日韩精品亚洲专区在线观看 | 麻豆精品密在线观看 | 黄视频网址| 在线免费看片网站 | 综合久久99久久99播放 | 欧美综合另类 | 中国国产一级毛片 | 乡下女色又黄一级毛片 | 国产成人免费网站在线观看 | 亚洲欧洲国产成人综合一本 | 日韩中文字幕精品视频在线 | 91久久国产露脸精品免费 | www.99精品| 欧美成人xx禁片在线观看 | 91久久老司机福利精品网 | 成年美女黄网站色大免费视频 | 亚洲激情成人网 | 欧美精品一二区 | 一级特黄牲大片免费视频 | 午夜激情婷婷 | 9191国语精品高清在线最新 | 国产高清大尺度一区二区不卡 | 国产一区二区三区久久精品 | 97久久天天综合色天天综合色hd | 高清国产一区二区三区 |