Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通用方法don';t与';int';类型变量?_Java_Generics_Int - Fatal编程技术网

Java 通用方法don';t与';int';类型变量?

Java 通用方法don';t与';int';类型变量?,java,generics,int,Java,Generics,Int,我在处理两个变量时遇到了一些问题:int和Integer。 它们大致相同,但(如下面的代码所示)它们的行为并不总是相同的。 我的问题是: 这段代码工作得非常完美。我制作了一个通用方法printary,它需要一个任何类型变量的数组(因为它是通用的)才能工作。 这里我使用变量类型Integer。 但是,当我将数组“getal”的类型更改为int(而不是Integer)时,printArray方法无法正常工作。为什么呢?泛型方法不适用于int类型变量吗 package Oefenen; public

我在处理两个变量时遇到了一些问题:int和Integer。 它们大致相同,但(如下面的代码所示)它们的行为并不总是相同的。 我的问题是: 这段代码工作得非常完美。我制作了一个通用方法printary,它需要一个任何类型变量的数组(因为它是通用的)才能工作。 这里我使用变量类型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);
        }
    }
}
包装奥芬宁;
公共类打印数组
{
公共静态void main(字符串参数[])
{
整数[]getal={10,20,30,40,50};
打印阵列(getal);
}
公共静态void打印数组(E[]intArray)
{
对于(E元素:intArray)
{   
System.out.printf(“%s\n”,元素);
}
}
}
ps:如果我将泛型方法更改为仅用于int的方法,它确实可以工作。 所以我想问题是:泛型方法不适用于int。
我是不是

泛型方法仅适用于对象的子类型。整数是对象的子类型。int不是一个对象,而是一个基元。因此,这是预期的行为。这是非常有用的


这个相关的函数也可能有用

泛型仅适用于类。int、as double、float等。。。类不是仅适用于实类型的泛型,int是一种基本类型(如float、double等)

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

int primitiveInt = 1;

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

另一种方法也可以,但要注意可能出现的NullPointerException,因为实类型可能为null,这不是自动装箱处理的。(基元类型始终具有默认值)

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

-
泛型
只处理对象
int
原语类型,但
Integer
包装对象。由于Java 5引入了
AutoBoxing
,因此在从int移动到Integer或从int移动到Integer时,无法找到差异


-
集合中
当我们使用
泛型时,也会使用包装器对象。

是的,你是对的。它们不适用于基本类型,只适用于类。