3

我在使用两个变量时遇到了一些问题: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

4 回答 4

7

泛型方法仅适用于 Object 的子类型。Integer 是 Object 的子类型。int 不是对象,而是原语。所以这是预期的行为。这个链接非常有用

这个相关的问题也可能有用

于 2012-11-26T11:11:09.950 回答
3

泛型仅适用于类。int, as double, float, etc...不是类

于 2012-11-26T11:11:28.597 回答
0

泛型仅适用于真实类型,int 是原始类型(如 float、double、...)

但是,您可以使用自动装箱,例如

int primitiveInt = 1;

// this will 'autobox' (transform) the primitive type to a real type.
Integer typedInt = primitiveInt;

另一种方法也可以,但要注意可能的 NullPointerExceptions,因为真实类型可能是 null,这不是由自动装箱处理的。(原始类型总是有一个默认值)

于 2012-11-26T11:18:20.657 回答
0

-虽然Generic可以与类、方法、变量、接口一起使用,但使用泛型的主要原因之一是使集合类型安全。

- Generics只处理对象int原始类型,但是IntegerWrapper Objects。由于AutoBoxing它是从 Java 5 引入的,当您从 int 移动到 Integer 时,您无法找到差异,反之亦然。

-Collection我们使用 时,也会使用GenericsWrapper 对象。

于 2012-11-26T11:22:34.623 回答