最近,我在閱讀下面這段代碼時,從Oracle集合教程中看到了這段代碼。通用返回對象
public static <E> Set<E> removeDups(Collection<E> c) {
return new LinkedHashSet<E>(c);
}
我無法理解爲什麼返回值是什麼
<E> Set<E> and not just Set<E> ?
最近,我在閱讀下面這段代碼時,從Oracle集合教程中看到了這段代碼。通用返回對象
public static <E> Set<E> removeDups(Collection<E> c) {
return new LinkedHashSet<E>(c);
}
我無法理解爲什麼返回值是什麼
<E> Set<E> and not just Set<E> ?
返回類型,其實根本Set<E>
。
其他<E>
是否表示這是一種通用方法,並聲明E
是通用參數。如果沒有這個<E>
,編譯器會認爲E
是一個現有的類,並且會嘗試找到它(如果沒有名爲E
的類在範圍內,則會產生錯誤)。
它是只是Set
,具有類型爲E
的元素的集合更精確。返回類型前面的額外<E>
是該方法的類型聲明,指定<E>
類型僅用於此特定方法的範圍 - 不要與類的類型參數混淆,如下所示:
public class Example<E> {
在上面的代碼中,類型參數<E>
是在類的所有方法可見的,而類型聲明像在你的問題,可見僅在該法。
返回類型是Set<E>
而不是<E> Set<E>
。第一個<E>
聲明通用類型變量E
,而其他連接到集合類的<E>
正在使用該聲明。
E可能是一類。通過返回<E> Set<E>
您聲明E是泛型中的參數。
這是一個靜態函數,所以E沒有底層定義。
是的,第一個看起來有點奇怪。考慮第一種方法的一種方式是,它說(或者提醒你)編譯器會根據在Collection中傳入的類型自己找出E爲,並且你(用戶)不需要明確地告訴它E是什麼。
Java教程關於泛型方法的文章:http://docs.oracle.com/javase/tutorial/extra/generics/methods.html – 2012-01-18 20:02:37