Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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基本类型的参数?_Java_Primitive Types - Fatal编程技术网

所有Java基本类型的参数?

所有Java基本类型的参数?,java,primitive-types,Java,Primitive Types,我有这个功能 static public void Print(Object[] arr) { for(int i = 0; i < arr.length; i++) System.out.println(i + " => " + arr[i]); } 静态公共作废打印(对象[]arr){ 对于(int i=0;i”+arr[i]); } 我想对每个基元类型数组使用它。在不为每个基元类型重写它的情况下,难道没有任何方法可以做到这一点吗 注意:这只是一个示例

我有这个功能

static public void Print(Object[] arr) {
    for(int i = 0; i < arr.length; i++)
        System.out.println(i + " => " + arr[i]);
}
静态公共作废打印(对象[]arr){
对于(int i=0;i”+arr[i]);
}
我想对每个基元类型数组使用它。在不为每个基元类型重写它的情况下,难道没有任何方法可以做到这一点吗


注意:这只是一个示例函数。我想知道是否有这种技术。

是的,这叫做泛型。泛型是C++中的模板——一种变量类型。
请看这里:

原语数组是java中的对象,因此可以使用
Object
-type作为参数(注意,不是对象数组,而是对象)。问题是,您仍然需要将其转换为正确的类型,以便能够迭代数组

public class ArrayTest
{
    public void paramTest(Object args)
    {       
        if(args instanceof int[])
        {
            System.out.println("int-array");
        }

        if(args instanceof float[])
        {
            System.out.println("float-array");
        }
    }

    @Test
    public void test()
    {
        paramTest(new int[5]);
        paramTest(new float[5]);
    }
}
输出:

int-array
float-array

您可以像这样使用Java泛型来实现您想要的,这里的
Number
Java.lang.Number

public static <T extends Number> void print(T[] arr)
{
    for (int i = 0; i < arr.length; i++)
    {
        System.out.println(i + " => " + arr[i]);
    }
}
公共静态无效打印(T[]arr)
{
对于(int i=0;i”+arr[i]);
}
}

但这只适用于基本包装类的数组,而不适用于基本数组。

不,这是不可能的。数组元素类型未包装,
Object[]
形式参数不适用于例如
int[]
实际参数。每个基元类型必须编写一个方法,如中所示。丑陋,但这是唯一的方法。

您不能对基本体执行此操作。如果您的设计允许,我强烈建议您改用对象版本。@VinceEmigh-因为基本体不是对象,并且没有语言级别支持从基本体类型到对象类型的“裸”自动装箱。如果尝试传入“原始”基本体数组,如调用
print(new float[5]),这将不起作用
->“不适用于参数(浮点[])”。基元数组不是自动装箱的。@esaj,同意。更新了我的答案,提到了这一点。谢谢,谢谢。这对我很有用;静态公共无效打印(E[]arr)It。。。做什么Java版本?请出示电话号码好吗?在链接的wiki页面中:“
public T[]toArray(T…elements){return elements;}
在这种情况下,您也不能使用本机类型,例如:Integer[]array=toArray(1,2,3,4,5);”-我得到了
int[]
和该签名的“不适用”。哦,对不起,它不能使用int[]类型参数,只有Integer[]。你是对的。我不能为此改变整个结构。我认为这是不可能的。