2012-01-18 47 views
7

最近,我在閱讀下面這段代碼時,從Oracle集合教程中看到了這段代碼。通用返回對象

public static <E> Set<E> removeDups(Collection<E> c) { 
      return new LinkedHashSet<E>(c); 
} 

我無法理解爲什麼返回值是什麼

  <E> Set<E> and not just Set<E> ? 
+0

Java教程關於泛型方法的文章:http://docs.oracle.com/javase/tutorial/extra/generics/methods.html – 2012-01-18 20:02:37

回答

7

返回類型,其實根本Set<E>

其他<E>是否表示這是一種通用方法,並聲明E是通用參數。如果沒有這個<E>,編譯器會認爲E是一個現有的類,並且會嘗試找到它(如果沒有名爲E的類在範圍內,則會產生錯誤)。

2

只是Set,具有類型爲E的元素的集合更精確。返回類型前面的額外<E>是該方法的類型聲明,指定<E>類型僅用於此特定方法的範圍 - 不要與類的類型參數混淆,如下所示:

public class Example<E> { 

在上面的代碼中,類型參數<E>是在類的所有方法可見的,而類型聲明像在你的問題,可見僅在該法。

2

返回類型是Set<E>而不是<E> Set<E>。第一個<E>聲明通用類型變量E,而其他連接到集合類的<E>正在使用該聲明。

0

E可能是一類。通過返回<E> Set<E>您聲明E是泛型中的參數。

這是一個靜態函數,所以E沒有底層定義。

0

是的,第一個看起來有點奇怪。考慮第一種方法的一種方式是,它說(或者提醒你)編譯器會根據在Collection中傳入的類型自己找出E爲,並且你(用戶)不需要明確地告訴它E是什麼。