泛型,把型別引數化。
泛型的命名規則:
不要小寫字母表示泛型名字,雖然這也沒什麼錯。如果可以的話,泛型就用「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...