在谈到泛型时,从技术上讲很难包括原始类型吗?
在Java的情况下,这是因为泛型的工作方式。在Java中,泛型是一种编译时技巧,可防止您将
Image对象放入
ArrayList<String>。但是,Java的泛型是通过类型擦除实现的:泛型类型信息在运行时会丢失。这是出于兼容性的原因,因为泛型是在Java生命后期才添加的。这意味着,在运行时,an
ArrayList<String>实际上是一个
ArrayList<Object>(或更好的:只是
ArrayList期望并返回
Object其所有方法)
String在检索值时自动转换为。
但是由于
int不是从派生的
Object,所以您不能将其放在期望的ArrayList中(在运行时)
Object,也不能将强制
Object转换
int为。这意味着
int必须将原语包装为确实继承自的类型
Object,例如
Integer。
例如,C#的工作原理有所不同。C#中的泛型也会在运行时强制执行,并且不需要装箱
List<int>。仅当您尝试将值类型存储
int在引用类型变量(如)中时,C#中的装箱操作才会发生
object。由于
int在C#中是从C#继承而来的
Object,因此编写
objectobj = 2是完全有效的,但是int将被装箱,这是由编译器自动完成的(没有
Integer引用类型暴露给用户或其他任何对象)。



