java中的泛型有什么用?
\quad
在 Java 5 泛型出來之前,集合中保存的是通用型別 Object,Java 單繼承的結構意味著所有元素都基于 Object 類,所以在集合中可以保存任何型別的資料,易于重用,要使用這樣的集合,我們先要往集合添加元素,由于 Java 5 版本前的集合只保存 Object,當我們往集合中添加元素時,元素便向上轉型成了 Object,從而丟失自己原有的型別特性,這時我們再從集合中取出該元素時,元素的型別變成了 Object,那么我們該怎么將其轉回原先具體的型別呢?這里,我們使用了強制型別轉換將其轉為更具體的型別,這個程序稱為物件的“向下轉型”,通過“向上轉型”,我們知道“圓形”也是一種“形狀”,這個程序是安全的,可是我們不能從“Object”看出其就是“圓形”或“形狀”,所以除非我們能確定元素的具體型別資訊,否則“向下轉型”就是不安全的,也不能說這樣的錯誤就是完全危險的,因為一旦我們轉化了錯誤的型別,程式就會運行出錯,拋出“運行時例外”(RuntimeException),(后面的章節會提到) 無論如何,我們要尋找一種在取出集合元素時確定其具體型別的方法,另外,每次取出元素都要欄位外的“向下轉型”對程式和程式員都是一種開銷,以某種方式創建集合,以確認保存元素的具體型別,減少集合元素“向下轉型”的開銷和可能出現的錯誤難道不好嗎?這種解決方案就是:引數化型別機制(Parameterized Type Mechanism),
\quad
引數化型別機制可以使得編譯器能夠自動識別某個 class 的具體型別并正確地執行,舉個例子,對集合的引數化型別機制可以讓集合僅接受“形狀”這種型別的元素,并以“形狀”型別取出元素,Java 5 版本支持了引數化型別機制,稱之為“泛型”(Generic),泛型是 Java 5 的主要特性之一,你可以按以下方式向 ArrayList 中添加 Shape(形狀):
ArrayList<Shape> shapes = new ArrayList<>();
注:以上例子,如果不加泛型的話,那就是默認回傳Oject類
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/157325.html
標籤:其他
上一篇:白帽黑客最常用的10種黑客工具
下一篇:【密碼學原理】RSA演算法
