2010-01-06 68 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(); 
}