泛型提供了編譯時型別安全監測機制,該機制允許程式員在編譯時檢測到非法的型別,
本質:
泛型本質是指
型別引數化,也就是說所操作的資料型別被指定為一個引數,
允許在定義類、介面、方法時使用型別形參,當使用時指定具體型別,所有使用該泛型引數的地方都被統一化,保證型別一致,如果未指定具體型別,默認是Object型別,
集合體系中的所有類都增加了泛型,泛型也主要用在集合,
泛型基礎

1、泛型類()
除了在類名后面添加了型別引數宣告部分,泛型類的宣告和非泛型類的宣告類似,
泛型類的型別引數宣告部分包含一個或多個型別引數,引數間用逗號隔開,一個泛型引數,也被稱為一個型別變數,是用于指定一個泛型型別名稱的識別符號,因為他們接受一個或多個引數, 這些類被稱為引數化的類或引數化的型別,
public class Box<T> {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
2、泛型方法()
// 泛型方法 printArray
public static < E > void printArray( E[] inputArray )
{
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
}
該方法在呼叫時可以接受不同型別的引數,根據傳遞給泛型方法的引數型別,編譯器適當的處理每一個方法呼叫,
- 表示該通配符所代表的型別是T型別的子類,
- 表示該通配符所代表的型別是T型別的父類,
泛型的上限和下限
泛型的上限:
- 格式:型別名稱<? extends 類>物件名稱
- 意義:只能接收該類及其子類
泛型的下限: - 格式:型別名稱<? super類>物件名稱
- 意義:只能接收該類及其父類
3、型別通配符
型別通配符一般是使用?代替具體的型別引數,例如List<?>在邏輯上是List
4、型別擦除
Java中的泛型基本上都是在編譯器這個層次來實作的,泛型是提供給Javac編譯器使用的,它用于限定結合的輸入型別,讓編譯器在源代碼級別上就擋住想集合中插入非法資料,編譯完成帶有泛型的Java程式后,生成的class檔案(Java位元組代碼)不再帶有泛型資訊,因此是程式運行效率不受影響,這個程序叫做型別擦除,
如在代碼中定義的List<Object>和List<String>等型別,在編譯之后 都會變成List,JVM看到的只是List,而由泛型附加的型別資訊對JVM來說是不可見的,
型別擦除的基本程序也比較簡單,首先是找到用來替換型別引數的具體類,這個具體類一般是Object,如果指定了型別引數的上界的話,則使用這個上界,把代碼中的型別引數都替換 成具體的類,
由于型別被擦除了,為了維持多型性,編譯器自動生成了橋接辦法,
撰寫不易,轉載注明出處:https://www.cnblogs.com/lmh15054109/p/14416639.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/261245.html
標籤:Java
上一篇:新春首發!Spring Boot 2 個新版本...
下一篇:Java String型別
