Java的所有原始类型的参数?

时间:2012-02-11 12:55:12

标签: java primitive-types

我有这个功能;

static public void Print(Object[] arr) {
    for(int i = 0; i < arr.length; i++)
        System.out.println(i + " => " + arr[i]);
}

我想对每个基本类型数组使用它。如果没有为每种原始类型覆盖它,有没有办法做到这一点?

注意:这只是一个示例功能。如果有技术,我想知道这项技术。

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

是的,那叫做泛型。泛型 - 就像c ++中的模板 - 变量类型。

看看这里:http://en.wikipedia.org/wiki/Generics_in_Java

答案 3 :(得分:0)

您可以使用这样的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]);
    }
}

但这只适用于原始包装类的数组,而不适用于Primitive数组。