和Java泛型談談

2021-07-11 06:42:55 字數 2811 閱讀 3590

泛型,把型別引數化。

泛型的命名規則:

不要小寫字母表示泛型名字,雖然這也沒什麼錯。如果可以的話,泛型就用「t」來表示。

還有就是類上的泛型和方法上的泛型,名字盡量不要相同。

它在jdk1.5之後出現,主要的作用是解決安全問題

比如下面的安全問題:

private static void method_1() 

}

arraylist可以新增任何型別的元素,該方法在程式編譯時並不會出現問題。但是在迭代取值時,integer型別的值無法轉換為string,會出現classcastexception異常。

而避免這種問題的,就是指定arraylist的元素的型別,把型別引數化。比如這樣:

arraylist al=new arraylist();

al.add("abc01");

al.add("abc0991");

al.add("abc014");

編譯時提示錯誤

本例子中,泛型可以把一些錯誤提前到了編譯時期,方便了除錯。而且在迭代時,不再需要強制轉化。

iteratorit=al.iterator();

while(it.hasnext())

1,泛型定義在類上

arraylist類上的泛型

public

class

arraylist

extends

abstractlist

arraylist al=new arraylist();

傳遞進去的類的泛型是string,而定義在類上的泛型,在整個類中都是有效的。

類上的泛型可以由乙個也可以由多個:

class genericforclass1

private t get()

private

void

print()

}private

void

generic_1()

class genericforclass2

private t1 gett1()

private

void

sett2(t2 t)

private t2 gett2()

private

void

print()

}private

void

generic_1()

2,泛型定義在方法上

class genericforclass1

private t get()

private

void

print()

}

泛型定義在類上後,操作的型別就固定了。比如下面的寫法就有問題:

genericforclass1<

integer

> generic=

new genericforclass1<

integer

>();

eneric.

set("1");//編譯出錯

為了讓不同的方法操作不同的型別,我們可以不把泛型定義在類上,而是定義在方法上。

注意的是泛型如果定義在方法上,只對該方法是有效的。

如下:

class genericforclass1

}private

void

generic_1()

當然也可以在類上定義泛型,而在方法上也定義泛型來操作不同型別。如:

class genericforclass1

private t get()

private

void

print()

private

void

show(s s)

}private

void

generic_1()

靜態方法的泛型:

class demo1

private

void

set(t t)

//編譯時會出現錯誤

private

static

void

method(t t)

}

靜態方法訪問類上的泛型,編譯出錯。原因是,建立物件後才會有泛型。

比如arraylist al=new arraylist();

我們知道靜態成員是先載入的。

既然靜態方法無法訪問類上的泛型,我們可以為它在方法上定義泛型。

private

static

void method

(s s)

3,泛型定義在介面上

//泛型定義在介面上

inte***ce

myinter

//實現介面指定泛型

class

myimpl1

implements

myinter

}//實現介面後不知道傳遞什麼型別

class

myimpl2

implements

myinter

}

JAVA 泛型類,限制泛型和泛型方法

我在學習集合的時候對泛型還不太了解,只是覺得用了泛型之後能向自己的集合裡加入自己指定型別的物件,可以減少資料型別的轉換。那麼,脫離集合後,泛型到底該如何使用。今天碰巧看了一段關於泛型的講解,覺得泛型也沒有自己想象中那麼難,於是將自己的心得分享出來,希望能幫到有需要的人。泛型的知識點大概有 泛型類,限...

JAVA 泛型類和泛型方法(靜態方法泛型)

泛型類定義的泛型,在整個類中有效。如果被方法是用,那麼 泛型類的物件明確要操作的具體型別後,所有要操作的型別就已經固定了。為了讓不同的方法可以操作不同型別,而且型別還不確定。那麼 可以將泛型定義在方法上。泛型類class demo public void print t t class generi...

JAVA 泛型類和泛型方法(靜態方法泛型)

泛型類定義的泛型,在整個類中有效。如果被方法是用,那麼 泛型類的物件明確要操作的具體型別後,所有要操作的型別就已經固定了。為了讓不同的方法可以操作不同型別,而且型別還不確定。那麼 可以將泛型定義在方法上。泛型類class demo public void print t t class generi...