日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

《Java 核心技术卷1 第10版》学习笔记 ------ 泛型【基础】

發布時間:2024/9/30 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Java 核心技术卷1 第10版》学习笔记 ------ 泛型【基础】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

泛型從Java SE 5.0 中開始出現,是 Java 程序設計語言從 1.0 版本發布以來,變化最大的部分。

使用泛型機制編寫的程序代碼要比那些雜亂地使用 Object 變量,然后再進行強制類型轉換的代碼具有更好的安全性和可讀性。特別的泛型對集合類尤其有用,例如,ArrayList 就是一個無處不在的集合類。

至少在表面上看來, 泛型很像 C++ 中的模板(template)。

8.1 為什么要使用泛型程序設計

泛型程序設計(Generic programming) 意味著編寫的代碼可以被很多不同類型的對象所重用。

8.1.1 類型參數的好處

在 Java 中增加范型類之前, 泛型程序設計是用繼承實現的。ArrayList 類只維護一個 Object 引用的數組:

public class ArrayList // before generic classes {private Object[] elementData;...public get Object get(int i){...}public get Object add(Object o){...} }

這種方法有兩個問題。

// 當獲取一個值時必須進行強制類型轉換。 ArrayList files = new ArrayList(); ... String filename = (String) files.get(0);// 此外,這里沒有錯誤檢査。可以向數組列表中添加任何類的對象。 files,add(new File(". .."));

對于這個調用,編譯和運行都不會出錯。然而在其他地方,如果將 get 的結果強制類型轉換為 String 類型, 就會產生一個錯誤。

泛型提供了一個更好的解決方案: 類型參數( type parameters)。ArrayList 類有一個類型參數用來指示元素的類型:

// 泛型類使用類型參數,指明存儲的數據類型 // 這使得代碼具有更好的可讀性。人們一看就知道這個數組列表中包含的是 String 對象。 ArrayList<String> files = new ArrayList<String>():// Java SE 7 之后可以這樣寫, 略去后面的泛型說明 ArrayList<String> files = new ArrayList();

使用泛型指定明確類型之后,編譯器可以更好的檢測,從而降低出現類型轉換異常的可能,故更加安全。

8.1.2 誰想成為泛型程序員

應用程序員【做實際應用開發的程序員,非專業造輪子】往往更喜歡使用現成的泛型代碼,而不喜歡去設計開發自己的泛型代碼。

實現一個泛型類并沒有那么容易。對于類型參數,使用這段代碼的程序員可能想要內置( plugin) 所有的類。他們希望在沒有過多的限制以及混亂的錯誤消息的狀態下, 做所有的事情。因此, 一個泛型程序員的任務就是預測出所用類的未來可能有的所有用途。【這個難度是有點大的】

泛型程序設計劃分為 3 個能力級別。 基本級別是, 僅僅使用泛型類—典型的是像ArrayList 這樣的集合—不必考慮它們的工作方式與原因。大多數應用程序員將會停留在這一級別上,直到出現了什么問題。當把不同的泛型類混合在一起時,或是在與對類型參數一無所知的遺留的代碼進行銜接時, 可能會看到含混不清的錯誤消息。如果這樣的話,就需要學習 Java 泛型來系統地解決這些問題, 而不要胡亂地猜測。當然,最終可能想要實現自己的泛型類與泛型方法。

8.2 定義簡單泛型類

一個泛型類( generic class) 就是具有一個或多個類型變量的類。以一個 Pair 類為例:

// 類型變量 T 用“<>”,寫在類名后面 public class Pair<T> {private T first;private T second;public Pair() { first = null ; second = null ; }public PairfT first, T second) { this.first = first; this.second = second; }public T getFirstO { return first; }public T getSecondO { return second; }public void setFirst(T newValue) { first = newValue; }public void setSecond(T newValue) { second = newValue; } }

泛型類可以有多個類型變量。例如, 可以定義 Pair 類,其中 第一個域 和 第二個域 使用不同的類型:

public class Pair<T, U> { . . . } // 用具體的類型替換類型變量就可以實例化泛型類型, 例如: Pair<String> // 可以將結果想象成帶有構造器的普通類: Pair<String> Pair<String>(String, String) // 和方法: String getFirstO String getSecond() void setFirst(String) void setSecond(String)

換句話說,泛型類可看作普通類的工廠。

8.3 泛型方法

實際上,還可以直接定義一個帶有類型參數的簡單方法。

class ArrayAlg {// 定義在普通類中的泛型方法// 注意:類型變量修飾符放在方法修飾符后面,返回類型前面。// 當然這里的返回類型就是指定的泛型類型,參數也是.public static <T> T getMiddle(T... a){return a[a.length / 2];} }

調用泛型方法:

// 當調用一個泛型方法時,在方法名前的尖括號中放人具體的類型 String middle = ArrayAlg.<String>getMiddle("John", "Q.", "Public");// 其實編譯器可以根據實際傳入參數,確定泛型類型,所以可以簡寫 String middle = ArrayAlg.getMiddle("John", "Q.", "Public");

8.4 類型變量的限定(extends)

有時,類或方法需要對類型變量加以約束。未加限定的類型變量 T 相當于 Object,加上限定之后其表示范圍就變小了。

// 這里限定了類型變量 T 只能是實現了 Comparable 接口的類 public static <T extends Comparable> T min(T[] a){...}

讀者或許會感到奇怪—在此為什么使用關鍵字 extends 而不是 implements ? 畢竟,Comparable 是一個接口。下面的記法

<T extends BoundingType>
表示 T 應該是綁定類型的子類型 (subtype)T 和綁定類型可以是類, 也可以是接口。選擇關鍵字 extends 的原因是更接近子類的概念, 并且 Java 的設計者也不打算在語言中再添加一個新的關鍵字(如 sub)。

一個類型變量或通配符可以有多個限定,例如:

<T extends Comparable & Serializable, U extends Response>

限定類型用 “&” 分隔,而逗號“,”用來分隔多個類型變量。

在 Java 的繼承中, 可以根據需要擁有多個接口超類型, 但限定中至少有一個類。如果用一個類作為限定,它必須是限定列表中的第一個。

?

總結

以上是生活随笔為你收集整理的《Java 核心技术卷1 第10版》学习笔记 ------ 泛型【基础】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 白峰美羽在线播放 | 成人在线不卡视频 | 免费看日韩毛片 | avtt2015 | 精品乱子伦一区二区 | 亚洲乱轮视频 | 精品黄色片 | 中文字幕mv | 亚洲精品白浆高清久久久久久 | 91一级片 | 亚洲综合在线视频 | 亚洲一区激情 | 免费成人在线观看 | 在线播放国产精品 | 国产奶头好大揉着好爽视频 | 成人黄色电影网址 | 少妇系列在线观看 | 免费久久精品视频 | 韩日一区 | 熟女人妇 成熟妇女系列视频 | 国产伦人伦偷精品视频 | 亚洲精品乱码久久久久久日本蜜臀 | 国产精品视频自拍 | 亚洲女成人图区 | 永久免费国产 | 在线免费日韩av | 欧美无砖专区免费 | 男人天堂av电影 | 成人国产精品免费 | 天天操,夜夜操 | 国产精华一区二区三区 | jizz性欧美17 | 亚洲iv一区二区三区 | 国产三级播放 | 手机在线看片你懂的 | 日韩大片免费在线观看 | 看黄色一级 | 国产成人综合视频 | 九九爱精品 | 国产福利91精品一区二区三区 | 日本少妇久久 | 欧美一极片 | 中文av免费观看 | 国产经典自拍 | 婷婷九月| 91精品人妻一区二区三区果冻 | 在线一区 | 亚洲精品成人在线视频 | 五月网| 日吊视频| 午夜一区二区视频 | 国产精品久久久久久久天堂 | 在线1区| 欧美一区2区 | 日av一区 | 日韩久久一区二区 | 亚洲色图图片区 | 99精品久久久久久久 | 污污av | 亚洲自拍偷拍一区二区三区 | 爱啪啪av| 亚洲精品激情 | 精品国产亚洲AV | 一区二区成人免费视频 | 成人国产av一区二区三区 | 午夜性视频 | 日韩在线网址 | 国产五十路 | 青青操网站 | 30一40一50女人毛片 | 91九色视频在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产嫩草av | 生活片av | 亚洲一区中文字幕 | 香蕉视频网站在线观看 | av最新版天堂资源在线 | 免费成人电影在线观看 | 欧美亚洲第一区 | 亚洲免费在线播放 | 免费av一级 | 日韩毛片网站 | 91亚洲影院| 日日干日日插 | 久久精品66| caoporen在线| 无码人妻久久一区二区三区 | 污黄啪啪网| 欧美成人三级在线视频 | 亚洲911精品成人18网站 | 婷婷六月综合 | 日日操日日爽 | 亚洲伦理一区二区三区 | 双性皇帝高h喷汁呻吟 | 免费成人美女女电影 | av啊啊| www一起操 | 久久久久久成人精品 | 欧美激情视频在线播放 |