Java中泛型和C#中的泛型之区别

每个 Java 程序员都应该知道,Java中的泛型是”伪泛型“,是为了兼容 JDK1.5 之前的代码而采用”类型擦除“这种方式实现的”伪泛型“,关于 Java 为什么要采用类型擦除而不是实现真正的泛型,我有时间再写文章说明,因为现在已经 2025年3月4日 00:15:03 了,赶紧写篇短的博客,然后睡觉了。

我们知道,在 Java 中你定义的泛型中的类型,在编译之后就不存在了。

那么 C# 中的泛型是怎样的呢?它们之间的区别是什么呢 ?它们之间主要的区别如下:

关键区别总结

  1. 类型擦除:
    • Java 的泛型在编译时进行类型擦除,运行时无法获取泛型类型信息。
    • C# 的泛型在运行时保留类型信息。
  2. 值类型支持:
    • Java 的泛型不支持原始类型,必须使用包装类。
    • C# 的泛型支持原始类型。
  3. 协变和逆变:
    • Java 通过通配符实现有限的协变和逆变。
    • C# 通过 out 和 in 关键字实现更灵活的协变和逆变。

来直接看个例子,看一下 C# 中的真泛型:

而输出结果如下:

可以看到,在 C# 中你定义的泛型,在程序运行阶段是可以拿到元素真正的类型的!

码先生
Author: 码先生

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注