java和c#中泛型的语法差异

时间:2010-01-06 17:04:38

标签: c# java generics

我来自c#背景,与c#相比,java中的泛型看起来如何? (基本用法)

2 个答案:

答案 0 :(得分: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 :(得分:1)

有很多关于此的文章,但有one notable example讨论了Java中泛型的一些差异和局限性。

以下是从现有Collections教程中获取的一个简单示例:

// 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();
}