在Java語(yǔ)言中,泛型有著很重要的地位。那么為什么泛型這么重要?以及為什么我們需要泛型方法呢?下面文章將通過(guò)展示有無(wú)泛型類(lèi)型的方法,來(lái)為大家詳細(xì)講解原因。
1. 沒(méi)有泛型類(lèi)型的方法
假設(shè)你想編寫(xiě)一個(gè)方法,該方法需要兩個(gè)集合并獲得它們的交集。這是編寫(xiě)此類(lèi)方法的一種方法:
public static Set getIntersection(Set set1, Set set2){
Set result = new HashSet();
for(Object o: set1){
if(set2.contains(o))
result.add(o);
}
return result;
}
此方法不是類(lèi)型安全的,編譯器會(huì)給出警告。它有幾個(gè)潛在的問(wèn)題。首先,當(dāng)方法被調(diào)用并返回一些集合時(shí),調(diào)用者可能不知道類(lèi)型并且需要對(duì)每個(gè)元素進(jìn)行強(qiáng)制轉(zhuǎn)換操作。其次,不能將兩個(gè)不同類(lèi)型的集合傳遞給方法。最后,一般來(lái)說(shuō),我們應(yīng)該始終修復(fù)警告消息。
2. 泛型方法
該方法可以通過(guò)指定一個(gè)泛型類(lèi)型來(lái)修復(fù),如下所示:
public static <E> Set<E> getIntersection(Set<E> set1, Set<E> set2){
Set<E> result = new HashSet<E>();
for(E o: set1){
if(set2.contains(o))
result.add(o);
}
return result;
}
此方法是類(lèi)型安全的,沒(méi)有警告。我們指定三個(gè)集合的元素類(lèi)型應(yīng)該是相同的E。這樣調(diào)用者就知道返回類(lèi)型了,所以可以直接使用它的元素而不需要強(qiáng)制轉(zhuǎn)換。現(xiàn)在對(duì)元素類(lèi)型有嚴(yán)格的限制,所以只有兩個(gè)元素類(lèi)型相同的集合才能得到交集。
請(qǐng)注意,<E>在這種情況下,類(lèi)型參數(shù)列表位于方法的修飾符與其返回類(lèi)型之間。