java 高級泛型_java泛型的高級應用

展開全部

在上面的例子中,由于沒有限制class GenericsFoo類型持有者T的范圍,實際上這里32313133353236313431303231363533e59b9ee7ad9431333339666666的限定類型相當于Object,這和“Object泛型”實質是一樣的。限制比如我們要限制T為集合接口類型。只需要這么做:

class GenericsFoo,這樣類中的泛型T只能是Collection接口的實現類,傳入非Collection接口編譯會出錯。

注意:這里的限定使用關鍵字extends,后面可以是類也可以是接口。但這里的extends已經不是繼承的含義了,應該理解為T類型是實現Collection接口的類型,或者T是繼承了XX類的類型。

下面繼續對上面的例子改進,我只要實現了集合接口的類型: public?class?CollectionGenFoo?{????private?T?x;????public?CollectionGenFoo(T?x)?{????????this.x?=?x;????}????public?T?getX()?{????????return?x;????}????public?void?setX(T?x)?{????????this.x?=?x;????}}實例化的時候可以這么寫: public?class?CollectionGenFooDemo?{????public?static?void?main(String?args[])?{????????CollectionGenFoo?listFoo?=?null;????????listFoo?=?new?CollectionGenFoo(new?ArrayList());????????//?出錯了,不讓這么干。????????//?原來作者寫的這個地方有誤,需要將listFoo改為listFoo1????????//?需要將CollectionGenFoo改為CollectionGenFoo????????//?CollectionGenFoo?listFoo1?=?null;????????//?listFoo1=new?CollectionGenFoo(new?ArrayList());????????System.out.println("實例化成功!");????}}當前看到的這個寫法是可以編譯通過,并運行成功。可是注釋掉的兩行加上就出錯了,因為這么定義類型的時候,就限定了構造此類實例的時候T是確定的一個類型,這個類型實現了Collection接口,但是實現 Collection接口的類很多很多,如果針對每一種都要寫出具體的子類類型,那也太麻煩了,我干脆還不如用Object通用一下。別急,泛型針對這種情況還有更好的解決方案,那就是“通配符泛型”。 雖然Java泛型簡單的用 extends 統一的表示了原有的 extends 和 implements 的概念,但仍要遵循應用的體系,Java 只能繼承一個類,但可以實現多個接口,所以你的某個類型需要用 extends 限定,且有多種類型的時候,只能存在一個是類,并且類寫在第一位,接口列在后面,也就是:

這里的例子僅演示了泛型方法的類型限定,對于泛型類中類型參數的限制用完全一樣的規則,只是加在類聲明的頭部,如: public?class?Demo?{????//?T類型就可以用Comparable聲明的方法和Seriablizable所擁有的特性了} 為了解決類型被限制死了不能動態根據實例來確定的缺點,引入了“通配符泛型”,針對上面的例子,使用通配泛型格式為 extends Collection>,“?”代表未知類型,這個類型是實現Collection接口。那么上面實現的方式可以寫為: public?class?CollectionGenFooDemo?{????public?static?void?main(String?args[])?{????????CollectionGenFoo?listFoo?=?null;????????listFoo?=?new?CollectionGenFoo(new?ArrayList());????????//?出錯了,不讓這么干。????????//?原來作者寫的這個地方有誤,需要將listFoo改為listFoo1????????//?CollectionGenFoo?listFoo1?=?null;????????//?listFoo1=new?CollectionGenFoo(new?ArrayList());????????System.out.println("實例化成功!");????}}注意:

1、如果只指定了>,而沒有extends,則默認是允許Object及其下的任何Java類了。也就是任意類。

2、通配符泛型不單可以向下限制,如 extends Collection>,還可以向上限制,如 super Double>,表示類型只能接受Double及其上層父類類型,如Number、Object類型的實例。

3、泛型類定義可以有多個泛型參數,中間用逗號隔開,還可以定義泛型接口,泛型方法。這些都與泛型類中泛型的使用規則類似。

83d67e168825eb6893528ab4a34727d2.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529689.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529689.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529689.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java窗體線條切換消失_java – 如何更改apache poi生成的圖表不使用平滑線條并將空單元格顯示為間隙?...

我使用的是POI 3.12-beta1,并且代碼可以在圖例中創建包含多個數據集和命名系列的折線圖.但是,poi中折線圖的默認設置會生成一條已在數據點上平滑的線.空值也被繪制為0,但我們希望這些線在第一列停止,其中有一個空單元格.一旦在xlsx文件中呈現并更改這些設置,我就可以進入圖表屬…

java正則表達式 問號_正則表達式問號的四種用法詳解

正則表達式問號的四種用法詳解原文符號因為?在正則表達式中有特殊的含義,所以如果想匹配?本身,則需要轉義,\?有無量詞問號可以表示重復前面內容的0次或一次,也就是要么不出現,要么出現一次。非貪婪匹配貪婪匹配在滿…

java alert跳頁面_JavaScript中通過提示框跳轉頁面的方法

通過提示框跳轉頁面具體代碼如下所示:Documentwindow.onload function(){ //設置當頁面加載時執行var btn document.getElementsByTagName("button")[] //獲取btn元素btn.onclick function(){ //給button加上一個點擊事件var answer confirm("是否…

java jsp if else if_jsp頁面使用if else語句 | 學步園

jsp頁面嵌入java語句使用即可,但是在使用if else語句時一定要注意使用是標點的使用,在語句中分號不能寫,不符合jsp頁面的語法規則,若多寫了則會報錯:如下:{name: priceRA, type: string}, {name: priceRB, type: string}, {name: priceRC, type: string},{name: priceRD, typ…

mysql 優化300例_mysql的limit優化實例

測試環境操作系統: debian linux服務器版本: Mysql 5.0.24Mysql數據庫的Qcache緩存關閉數據庫表testtable的參數:類型: MyISAM 大小: >80MB 記錄規模: >50000 字段數: >25個字段id是主鍵 leibie字段上建有索引進行數據分段測試1>SQL不帶where條件的測試1…

mysql+百萬+中間表_MYSQL優化

MYSQL優化是一個非常大的課題,這篇文章主要介紹了跟MYSQL相關的4個方面,如果想深入研究可以查下相關資料。一、服務器級別優化二、操作系統級別優化三、MYSQL級別優化四、SQL級別優化一、服務器級別優化1.服務器選型SUN小型機、DELL730xd、HPDL380、IBM3…

java kafka 拉取_java獲取kafka consumer lag

maven依賴org.apache.kafkakafka-clients0.10.1.0注意:kafka-clients版本需要0.10.1.0以上,因為調用了新增接口endOffsets;laglogsize-offsetlogsize通過consumer的endOffsets接口獲得;offset通過consumer的committed接口獲得;imp…

java開源圖像處理ku_83 項開源視覺 SLAM 方案夠你用了嗎?

原標題:83 項開源視覺 SLAM 方案夠你用了嗎?公眾號:3D視覺工坊主要關注:3D視覺算法、SLAM、vSLAM、計算機視覺、深度學習、自動駕駛、圖像處理以及技術干貨分享運營者和嘉賓介紹:運營者來自國內一線大廠的算法工程師&a…

java 方法的拆分_java – 字符串拆分和比較 – 最快的方法

>將輸入讀入byte []數組以將指針保持在代碼的一側.>逐字節讀取,計算整數元素&#xff1a;int b inputBytes[p];int d b - 0;if (0 < d) {if (d < 9) {element element * 10 d;} else {// b :}} else {// b ,// add element to the hash; element 0;...}if (…

java sql異常_java.sql.SQLException: Io 異常: Got minus one from a

java.sql.SQLException: Io 異常: Got minus one from a read callat oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)at oracle.jdbc.driver.DatabaseError.thro…

java 攔截器ajax_(轉)攔截器深入實踐 - JAVA XML JAVASCRIPT AJAX CSS - BlogJava

Interceptor的定義我們來看一下Interceptor的接口的定義&#xff1a;Java代碼 publicinterfaceInterceptorextendsSerializable {/*** Called to let an interceptor clean up any resources it has allocated.*/voiddestroy();/*** Called after an interceptor is created, b…

php學的是什么意思_為什么要學習PHP?到底什么是PHP?

為什么要學習PHP?到底什么是PHP?PHP可以做什么?相信這樣的問題困擾著很多的人&#xff0c;在我沒工作之前&#xff0c;都沒有聽說過PHP&#xff0c;自從工作后&#xff0c;慢慢接觸到代碼&#xff0c;慢慢知道什么是PHP。PHP是做網站一種語言&#xff0c;很多工程師都使用PH…

php 多數據庫聯合查詢,php如何同時連接多個數據庫_PHP教程

下面是一個函數能夠保證連接多個數據庫的下不同的表的函數&#xff0c;可以收藏一下&#xff0c;比較實用&#xff0c;測試過是有用的。function mysql_oper($oper,$db,$table,$where1,$limit10){$connmysql_connect(localhost,like,admin,true) or mysql_error();mysql_select…

java判斷有沒有修改,java字節碼判斷對象應用是否被修改

原創1 背景在學習并發的時候看到了ConcurrentLinkedQueue隊列的源碼&#xff0c;剛開始的時候是看網上的帖子&#xff0c;然后就到IDE里邊看源碼&#xff0c;發現offer()方法在1.7版的時候有過修改。樓主的問題不是整個方法&#xff0c;而是其中的一截代碼“(t ! (t tail))”&…

php接口 含義,php晉級必備:一文讀懂php接口特點和使用!

PHP接口與類是什么關系&#xff1f;前面提到了php中抽象類和抽象方法&#xff0c;今天給大家談談php中接口技術。在PHP中每個類只能繼承一個父類&#xff0c;如果聲明的新類繼承了抽象類實現了以后&#xff0c;這個新類就不能有其它的父類了。但是在實際中需要繼承多個類實現功…

php獲取不重復的隨機數字,php如何生成不重復的隨機數字

【摘要】PHP即“超文本預處理器”&#xff0c;是一種通用開源腳本語言。PHP是在服務器端執行的腳本語言&#xff0c;與C語言類似&#xff0c;是常用的網站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。下面是php如何生成不重復的隨機數字&#xff0c;讓我們…

java 素數乘積,求助2424379123 = 兩個素數的乘積,求這兩個素數?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓import java.util.ArrayList;import java.util.Date;public class Test {static ArrayList list new ArrayList();/*** 初始化素數表* return*/public static ArrayList initArrayList() {list.add(2);list.add(3);list.add(5);li…

php header什么意思,php header是什么意思

header函數在PHP中是發送一些頭部信息的, 我們可以直接使用它來做301跳轉等&#xff0c;下面我來總結關于header函數用法與一些常用見問題解決方法。發送一個原始 HTTP 標頭[Http Header]到客戶端。標頭 (header) 是服務器以 HTTP 協義傳 HTML 資料到瀏覽器前所送出的字串&…

matlab dct稀疏系數,Matlab DCT詳解

轉自&#xff1a;http://blog.csdn.net/ahafg/article/details/48808443DCT變換DCT又稱離散余弦變換&#xff0c;是一種塊變換方式&#xff0c;只使用余弦函數來表達信號&#xff0c;與傅里葉變換緊密相關。常用于圖像數據的壓縮&#xff0c;通過將圖像分成大小相等(一般為8*8)…

matlab驗潮站,驗潮站的作用是什么

驗潮站的作用是什么?驗潮站的建成投入使用&#xff0c;可實時觀測沿海潮汐等觀測要素&#xff0c;為潮汐預報、赤潮的發生、風暴潮預警報、海嘯預警及海平面變化提供基礎數據保障以及預測&#xff0c;同時為科學開發海洋提供有力的支持&#xff0c;為海洋經濟健康發展保駕護航…