2012-11-26 26 views
2

我遇到了两个变量:int和Integer。 它们大致相同,但是(如下面的代码所示)它们并不总是相同。 这是我的问题: 这段代码工作得很完美。我做了一个通用的方法,printArray需要任何类型的变量的数组(因为它是通用的)才能工作。 这里我使用变量类型Integer。 但是,当我将我的数组类型'getal'更改为int(而不是整数)时,方法printArray不起作用。这是为什么?泛型方法不适用于int类型变量吗?泛型方法不能与'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的。 Am I

+1

是的,你是对的。它们不适用于原始类型,但仅适用于类。 –

回答

7

泛型方法只能用于Object的子类型。整数是对象的子类型。 int不是一个对象,而是一个基元。所以这是预期的行为。这link是非常有用的

此相关question也可能是有用

+0

真棒,只是我需要的信息,谢谢! :) – JordyV

3

仿制药仅适用于类。 INT,如双,浮法,等等......不是类

0

仿制药仅适用于真正的工作类型,int是一个基本类型(如浮动,双,...)

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

int primitiveInt = 1; 

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

周围的其他方法的工作原理也一样,但要注意可能NullPointerException异常的,因为一个真正的类型可以是零,这是不通过自动装箱处理。 (基本类型始终采用默认值)

0

-虽然Generic可以用类,方法,变量,接口可以使用,但使用泛型的主要原因之一就是让收藏类型安全。

-Generics涉及唯一对象int原始类型类型,但Integer包装对象。由于是从Java 5引入的AutoBoxing,因此当您从int移动到Integer时,无法找到差异,反之亦然。

-Collection也当我们使用Generics时,然后使用包装对象。

相关问题