我来自c#背景,与c#相比,java中的泛型看起来如何? (基本用法)
答案 0 :(得分:5)
这是一个非常大的问题,说实话 - 最大的区别不是语法,而是行为......在这一点上,他们真的是非常不同。
我建议你仔细阅读Sun generics tutorial和Angelika 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();
}