2010-01-06 46 views

回答

5

這是一個相當大的問題,說實話 - 最大的區別不在於語法,而在於行爲......在這一點上,他們真的非常不同。

我建議你閱讀Sun generics tutorialAngelika Langer's Java Generics FAQ。儘管從C#/ .NET首先儘可能地忘掉你對泛型的所有知識。特別是,雖然.NET泛型類型在執行時保留了類型參數,但Java泛型並不是由於類型擦除

因此,換句話說,在C#中,你可以寫:

public class GenericType<T> 
{ 
    public void DisplayType() 
    { 
     Console.WriteLine(typeof(T)); 
    } 
} 

...你不能在Java中:(

此外爲此,.NET泛型可以有值類型變量類型,而Java泛型不能(所以你必須使用List<Integer>而不是List<int>爲例)。

這些可能是兩個最大的差異,但它是值得努力學習Java根兒從頭開始,而不是從C#中的「差異」。

1

有很多關於這方面的文章,但有one notable example討論了泛型在Java中的一些差異和侷限性。

這裏是從現有的集合教程採取了一個簡單的例子:

// Removes 4-letter words from c. Elements must be strings 
static void expurgate(Collection c) { 
    for (Iterator i = c.iterator(); i.hasNext();) 
     if (((String) i.next()).length() == 4) 
     i.remove(); 
} 

下面是修改爲使用泛型same example

// Removes the 4-letter words from c 
static void expurgate(Collection<String> c) { 
    for (Iterator<String> i = c.iterator(); i.hasNext();) 
     if (i.next().length() == 4) 
     i.remove(); 
}