你了解泛型嘛

2021-10-06 10:03:16 字數 3080 閱讀 2348

泛型方法

泛型介面

型別擦除、

泛型的注意點

集合容器類在設計階段/宣告階段不能確定這個容器到底實際存的是什麼型別的物件,

所以在jdk1.5之前只能把元素型別設計為object,jdk1.5之後使用泛型來解決。

因為這個時候除了元素的型別不確定,其他的部分是確定的,例如關於這個元素如何

儲存,如何管理等是確定的,因此此時把元素的類設計成乙個引數,這個型別引數

叫做泛型。

所謂泛型,就是允許在定義類、介面時通過乙個標識表示類中某個屬性的類

型或者是某個方法的返回值及引數型別。這個型別引數將在使用時( 例如,

繼承或實現這個介面,用這個型別宣告變數、建立物件時)確定(即傳入實

際的型別引數,也稱為型別實參)。collection, list,

arraylist這個就是型別引數,即泛型。

class

myclass

public

class

test1

}

class

mclass

public

class

test1

}

泛型類的使用-萬用字元(wildcards)
? 用於在泛型的使用,即為萬用字元
public

class

myarraylist

// 可以傳入任意型別的 myarraylist

public

static

void

printall

(myarraylist<

?> list)

// 以下呼叫都是正確的

printall

(new

myarraylist

());

printall

(new

myarraylist

());

printall

(new

myarraylist

());

printall

(new

myarraylist

());

printall

(new

myarraylist

());

<

?extends 上

// 可以傳入型別實參是 number 子類的任意型別的 myarraylist

public

static

void

printall

(myarraylist<

?extends

number

> list)

<

?super 下

// 可以傳入型別實參是 integer 父類的任意型別的 myarraylist

public

static

void

printall

(myarraylist<

?super integer> list)

在方法宣告時用表示的方法,中的t稱為型別引數,而方法中的t被稱為引數

化型別,他不是執行時真正的引數

public

void

fun(t t)

public

t test

(t t)

class

myclass2

}public

class

test1

}

inte***ce

isubject

class

sujectimpl

implements

isubject

}

2)子類實現介面時仍然保留泛型

class

subjectimpl2

implements

isubject

}

泛型是作用在編譯期間的一種機制,實際上執行期間是沒有這麼多類的,那執行期間

是什麼型別呢?這裡就是型別擦除在做的事情

jdk 1.5引入 泛型只存在於編譯階段,在進入jvm之前,與泛型有關的資訊會被完全擦除 泛型類再進行型別擦除時,未指定泛型的上限,泛型相關資訊會被擦除位object型別,如果有上限,擦除為對應型別的上限。

class

myclass

number

>

t>>>object

e>>>number

泛型型別引數不支援基本資料型別

無法例項化泛型型別的物件

無法使用泛型型別宣告靜態的屬性

無法使用 instanceof 判斷帶型別引數的泛型型別

無法建立泛型類陣列

無法 create、catch、throw 乙個泛型類異常(異常不支援泛型)

泛型型別不是形參一部分,無法過載

泛型**與jvm ① 虛擬機器中沒有泛型,只有普通類和方法。 ② 在編譯階段,所有泛型類的型別引數都會被object或者它們的限定邊界來替換。(型別擦除) ③ 在繼承泛型型別的時候,橋方法的合成是為了避免型別變數擦除所帶來的多型災難。 無論我們如何定義乙個泛型型別,相應的都會有乙個原始型別被自動提供。原始型別的名字就是擦除型別引數的泛型型別的名字。

yaf mysql 你了解Yaf 是什麼嘛

yaf 是什麼 yaf,全稱 yet another framework,是乙個c語言編寫的 基於php擴充套件開發的php框架。相比於一般的php框架,它更快,快到被譽為最快的php開發框架。它提供了bootstrap 路由 分發 檢視 外掛程式功能。yaf 的優點用c語言開發的php框架,相比原...

深入了解泛型

泛型是為編譯器用的 例如arraylistcollection new arraylist collection.add abb 編譯器會報錯 通過反射 collection.getclass getmethod add object.class invoke collection,sd 因為編譯器...

泛型 泛型類 泛型方法 泛型擦除

1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...