本文目錄一覽:
- 1、北大青鳥java培訓:JAVA泛型淺談?
- 2、(四)泛型的高級應用
- 3、java 泛型的幾種用法
- 4、JAVA泛型有什麼作用?泛型是實泛型還是偽泛型?
- 5、java中什麼叫泛型?
- 6、java中泛型的使用
北大青鳥java培訓:JAVA泛型淺談?
1.概述 在引入泛型之前,Java類型分為原始類型、複雜類型,其中複雜類型分為數組和類。
java課程發現引入范型後,一個複雜類型就可以在細分成更多的類型。
例如原先的類型List,現在在細分成ListObject,ListString等更多的類型。
注意,現在ListObject,ListString是兩種不同的類型,他們之間沒有繼承關係,即使String繼承了Object。
2.定義使用 類型參數的命名風格為: 推薦你用簡練的名字作為形式類型參數的名字(如果可能,單個字符)。
最好避免小寫字母,這使它和其他的普通的形式參數很容易被區分開來。
使用T代表類型,無論何時都沒有比這更具體的類型來區分它。
這經常見於泛型方法。
如果有多個類型參數,我們 可能使用字母表中T的臨近的字母,比如S。
如果一個泛型函數在一個泛型類裡面出現,最好避免在方法的類型參數和類的類型參數中使用同樣的名字來避免混 淆。
對內部類也是同樣。
2.1定義帶類型參數的類 在定義帶類型參數的類時,在緊跟類命之後的內,指定一個或多個類型參數的名字,同時也可以對類型參數的取值範圍進行限定,多個類型參數之間用,號分隔。
定義完類型參數後,可以在定義位置之後的類的幾乎任意地方(靜態塊,靜態屬性,靜態方法除外)使用類型參數,就像使用普通的類型一樣。
注意,父類定義的類型參數不能被子類繼承。
2.2定義待類型參數方法 在定義帶類型參數的方法時,在緊跟可見範圍修飾(例如public)之後的內,指定一個或多個類型參數的名字,同時也可以對類型參數的取值範圍進行限定,多個類型參數之間用,號分隔。
定義完類型參數後,可以在定義位置之後的方法的任意地方使用類型參數,就像使用普通的類型一樣。
(四)泛型的高級應用
第三篇文章中的 例子 在上面的例子中,由於沒有限制class WithGenericsT類型持有者T的範圍,實際上這裡的限定類型相當於Object,這和“Object泛型”實質是一樣的。限制比如我們要限制T為集合接口類型。只需要這麼做:
class WithGenericsT extends Collection,這樣類中的泛型T只能是Collection接口的實現類,傳入非Collection接口編譯會出錯。
注意:T extends Collection這裡的限定使用關鍵字extends,後面可以是類也可以是接口。但這裡的extends已經不是繼承的含義了,應該理解為T類型是實現Collection接口的類型,或者T是繼承了XX類的類型。
雖然Java泛型簡單的用 extends 統一的表示了原有的 extends 和 implements 的概念,但仍要遵循應用的體系,Java 只能繼承一個類,但可以實現多個接口,所以你的某個類型需要用 extends 限定,且有多種類型的時候,只能存在一個是類,並且類寫在第一位,接口列在後面,也就是:
T extends SomeClass interface1 interface2 interface3
這裡的例子僅演示了泛型方法的類型限定,對於泛型類中類型參數的限制用完全一樣的規則,只是加在類聲明的頭部,如:
為了解決類型被限制死了不能動態根據實例來確定的缺點,引入了“通配符泛型”,針對上面的例子,使用通配泛型格式為? extends Collection,“?”代表未知類型,這個類型是實現Collection接口。那麼上面實現的方式可以寫為:
是否擁有泛型方法,與其所在的類是否泛型沒有關係。要定義泛型方法,只需將泛型參數列表置於返回值前。
使用泛型方法時,不必指明參數類型,編譯器會自己找出具體的類型。泛型方法除了定義不同,調用就像普通方法一樣。
參考資料:
java 泛型的幾種用法
1. public class DAOT {
/**
* 泛型類
* 聲明類的同時聲明泛型類型
* 1.方法的返回值可以是使用聲明的泛型類型
* 2.方法的參數也可以是聲明類的泛型類型
* 3.方法體內可以使用泛型類型
*/
public T get(Integer id){
return null;
}
public void save(T entity){
}
}
2.
/**
* 泛型方法: 在方法聲明時, 同時聲明泛型. 在方法的返回值, 參數列表以及方法體中都可以使用泛型類型.
* public static T T get(Integer id){
* T result = null;
* return result;
* }
* 把指定類型的數組中的元素放入到指定類型的集合中
*/
JAVA泛型有什麼作用?泛型是實泛型還是偽泛型?
泛型好處:
泛型簡單易用
類型安全 泛型的主要目標是實現java的類型安全。 泛型可以使編譯器知道一個對象的限定類型是什麼,這樣編譯器就可以在一個高的程度上驗證這個類型
消除了強制類型轉換 使得代碼可讀性好,減少了很多出錯的機會
Java語言引入泛型的好處是安全簡單。泛型的好處是在編譯的時候檢查類型安全,並且所有的強制轉換都是自動和隱式的,提高代碼的重用率。
泛型的實現原理
泛型的實現是靠類型擦除技術 類型擦除是在編譯期完成的 也就是在編譯期 編譯器會將泛型的類型參數都擦除成它的限定類型,如果沒有則擦除為object類型之後在獲取的時候再強制類型轉換為對應的類型。 在運行期間並沒有泛型的任何信息,因此也沒有優化。
泛型不考慮繼承
List 類型 是否 可以 賦值為 List類型 ?
答案是不可以的
雖然說在賦值之後 String類型可以當做 Object類型使用 但是還是會出現問題
參考:《2020最新Java基礎精講視頻教程和學習路線!》
java中什麼叫泛型?
泛型。規定了此集合中元素的類型。例如:\x0d\x0a\x0d\x0aArrayList arr = new ArrayList ();\x0d\x0a\x0d\x0a這樣就創建了一個包含整數的 ArrayList 對象。\x0d\x0a如果要自己定義泛型類,就用如下形式:\x0d\x0a\x0d\x0aclass MyCollection {…}\x0d\x0a\x0d\x0a尖括號中的類型可以有限制,例如你需要讓 MyCollection 中的類型都具有可比性,可以用如下格式:\x0d\x0a\x0d\x0aclass MyCollection {…}\x0d\x0a\x0d\x0a此外,要注意泛型的一些特性:\x0d\x0a\x0d\x0a1. 不能直接創建泛型數組。如 new ArrayList[5] 之類的是錯的。只能用如下方法:new ArrayList[5] 或者 (ArrayList[])new ArrayList[5];\x0d\x0a\x0d\x0a2. 靜態方法中需要小心,因為 E 一般是非靜態類型,如果你這樣寫:\x0d\x0a class MyCollection {\x0d\x0a public static MyCollection abc() {\x0d\x0a ……\x0d\x0a }\x0d\x0a }\x0d\x0a 是錯的。你只能把 去掉。
java中泛型的使用
一般使用在集合上,比如現在將一個字符串類型放在集合裡面,這時候,放入集合的字符會失去其本身的類型,只能是object類型,比如想要對這這個值進行轉換, 很容易出現類型轉換錯誤。可以使用泛型解決這個問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/303870.html