Java Generics - <int>到<Integer>

在学习Java泛型的过程中,我陷入了困境。
它被写成“Java泛型只适用于对象,而不适用于基元类型”。

例如

 Gen<Integer> gen=new Gen<Integer>(88);     // Works Fine ..  

但是,对于原始类型,如int,char等...

 Gen<int> gen=new Gen<int>(88) ;    // Why this results in compile time error 

我的意思是说,既然java泛型确实具有自动装箱和取消装箱功能,那么为什么当我们为类声明特定类型时不能应用此功能?

我的意思是,为什么不自动转换为?Gen<int>Gen<Integer>

请帮我消除这个疑问。
谢谢。


答案 1

自动装箱并没有说你可以使用 int 而不是 Integer。自动装箱可自动执行装箱和取消装箱过程。例如,如果我需要将一些原始int存储到集合中,我不需要手动创建wrpperer对象。它由Java编译器处理。在上面的示例中,您将实例化一个 Integer 类型的泛型对象。此泛型对象仍然可以很好地使用 int,但将 int 声明为泛型类型是错误的。泛型只允许对象引用,而不允许使用基元。


答案 2

正如您已经发现的那样,在 Java 泛型中,不能将基元类型作为类型参数提及。为什么会这样?在许多地方都有详细讨论,包括Java bug 4487555


推荐