如何使方法将任何类型的数组作为参数?

时间:2014-05-21 20:32:34

标签: java arrays

我希望能够将任何数组类型作为方法中的参数。:

public void foo(Array[] array) {
    System.out.println(array.length)
}

有没有办法在同一个方法中传递String []或int []数组?

4 个答案:

答案 0 :(得分:8)

使用generics

public <T>void foo(T[] array) {
    System.out.println(array.length);
}

这不适用于基本类型数组,例如int[]boolean[]double[],......您必须使用其类包装器:Integer[]Boolean[]Double[],...或分别为每个所需的基本类型重载方法。

答案 1 :(得分:3)

好吧,你可以这样做(因为数组是一个对象) -

public static int getArrayLength(Object array) {
    return Array.getLength(array);
}

public static void main(String[] args) {
    int[] intArray = { 1, 2, 3 };
    String[] stringArray = { "1", "2", "c", "d" };
    System.out.println(getArrayLength(intArray));
    System.out.println(getArrayLength(stringArray));
}

输出

3
4

答案 2 :(得分:3)

可以使用泛型。

我不了解它我建议你在文档中阅读它。 http://docs.oracle.com/javase/tutorial/java/generics/index.html

泛型与Objects一起工作,所以我认为你不能在同一个方法中传递String []和int []。改为使用Integer []。

以下是我将使用的代码:

public static <K> int  length(K[] array){
    return array.length;
}

这也可行:

public static int  length(Object[] array){
    return array.length;
}

但它不允许您使用特定类型的Object而不是Object类。

我在这方面很新,也许有更好的解决方案,但它是我唯一知道的!

答案 3 :(得分:0)

正如其他人所提到的,如果你想要能够接受原始类型的数组,现在有办法做到这一点(除非你在Elliott&#39的解决方案中做一些你只需要和对象并且只能使用像Object.getLength(Object)这样以Object作为输入的方法来获得。

我所做的是创建一个泛型方法,然后为每个基本数组类型重载它,如下所示:

public <T> void foo(T[] array) {
    //Do something
}

public void foo(double[] array) {
    Double[] dblArray = new Double[array.length];

    for(int i = 0; i < array.length; i++){
        dblArray[i] = array[i];
    }
    foo(dblArray);
}
//Repeat for int[], float[], long[], byte[], short[], char[], and boolean[]