嘿,新人们!今天咱们来聊聊 Java 的泛型和 C# 的泛型的差别。
先说说类型擦除。在 Java 里,泛型有个类型擦除的特点。啥意思呢?就是在运行的时候,泛型的类型信息会被擦掉,只留下最原始的类型。比如说咱们写个 List<String>
,但到了运行的时候,它其实就跟 List
差不多了。但是 C# 就不一样,在 C# 里,运行时泛型的类型信息是一直都在的。
再看对基本类型的支持。Java 里不允许直接把基本类型当作泛型参数,比如说不能写 List<int>
,得用包装类,写成 List<Integer>
。C# 就比较直接,List<int>
这样写完全没问题。
举个例子,Java 里:
List<Integer> numbers = new ArrayList<>();
numbers.add(5);
C# 里:
List<int> numbers = new List<int>();
numbers.Add(5);
然后是协变和逆变。这个可能有点复杂,简单说就是 Java 在这方面的支持相对少,C# 支持得更好。
最后说泛型方法。Java 里泛型方法的类型参数可以和所在类的类型参数没关系。比如:
public <T> void print(T element) {
System.out.println(element);
}
C# 里这方面更灵活一些。
发表评论