通用方法不适用于'int'类型变量?

时间:2012-11-26 11:09:56

标签: java generics int

我在使用两个变量时遇到了一些麻烦: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。 我是

4 个答案:

答案 0 :(得分:7)

通用方法仅适用于Object的子类型。 Integer是Object的子类型。 int不是对象而是基元。所以这是预期的行为。这个link非常有用

此相关question也可能有用

答案 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对象。