我在使用两个变量时遇到了一些麻烦:int和Integer。 它们大致相同,但(如下面的代码所示)它们并不总是相同。 这是我的问题: 这段代码非常完美。我已经创建了一个泛型方法printArray,它需要一个任何类型的变量数组(因为它是通用的)才能工作。 这里我使用变量类型Integer。 但是,当我改变我的阵列类型' getal'对于int(而不是Integer),printArray方法不再工作。这是为什么?泛型方法不适用于int类型变量吗?
package Oefenen;
public class printArray
{
public static void main (String args[])
{
Integer[] getal = {10, 20, 30, 40, 50};
printArray(getal);
}
public static <E> void printArray (E[] intArray)
{
for (E element : intArray)
{
System.out.printf("%s\n", element);
}
}
}
ps:如果我将泛型方法更改为仅适用于int的方法,它确实有效。 所以我认为问题是:通用方法不适用于int。 我是
答案 0 :(得分:7)
答案 1 :(得分:3)
泛型仅适用于类。 int,double,float等......不是类
答案 2 :(得分:0)
泛型仅适用于真实类型,int是基本类型(如float,double,...)
但是,您可以使用自动装箱,例如
int primitiveInt = 1;
// this will 'autobox' (transform) the primitive type to a real type.
Integer typedInt = primitiveInt;
另一种方式也适用,但要注意可能的NullPointerExceptions,因为实际类型可能为null,而不是由自动装箱处理。 (基本类型始终具有默认值)
答案 3 :(得分:0)
- 虽然Generic
可以与类,方法,变量,接口一起使用,但使用泛型的主要原因之一是使集合类型安全。强>
- Generics
仅处理对象。 int
是原始类型,但Integer
是包装对象。由于从Java 5引入的AutoBoxing
,当您从int移动到Integer或反之时,您无法找到差异。
- 在Collection
中,当我们使用Generics
时,也会使用Wrapper对象。