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

Java 如何使方法将任何类型的数组作为参数?,java,arrays,Java,Arrays,我希望能够接受任何数组类型作为方法中的参数: public void foo(Array[] array) { System.out.println(array.length) } 是否有一种方法可以用相同的方法传递字符串[]或int[]数组?使用 公共void foo(T[]数组){ System.out.println(数组.长度); } 这不适用于基本类型数组,例如int[],boolean[],double[],。。。您必须改用它们的类包装器:Integer[],Boolea

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

public void foo(Array[] array) {
    System.out.println(array.length)
}
是否有一种方法可以用相同的方法传递字符串[]或int[]数组?

使用

公共void foo(T[]数组){
System.out.println(数组.长度);
}

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

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

输出为

3
4

使用泛型是可能的

如果您不知道,我建议您阅读文档中的内容。

泛型与对象一起工作,因此我认为不能在同一个方法中传递字符串[]和int[]。改为使用整数[]

以下是我将使用的代码:

public static <K> int  length(K[] array){
    return array.length;
}
但它不允许您使用特定类型的对象而不是对象类


我是个新手,也许有更好的解决方案,但这是我唯一知道的

正如其他一些人所提到的,如果您希望也能接受基本类型的数组,现在有一种方法可以做到这一点(除非您在Elliott的解决方案中做了类似的事情,您只需要和对象,并且只能通过使用Array.getLength(对象)之类的方法获取对象作为输入)

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

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[]
公共void foo(T[]数组){
//做点什么
}
公共void foo(双[]数组){
Double[]dblArray=新的Double[array.length];
for(int i=0;i
使其通用化。然后,您可以将其声明为接受您想要的任何类型的集合。不,您可以将该方法设置为泛型以传递类型为T的数组,但对于基元数组,您必须重载它。将该方法更改为泛型解决了此问题,谢谢。但这只解决了计算数组长度的一个非常特殊的情况。如果要对传递的数组执行其他操作,您会怎么做?:)@HonzaZidek使用其他(静态)方法;例如
Array.get(Array,0)
。我不知道这一点。与标准阵列使用相比,它的速度有多快
T var=Array.get(Array,0)
vs.
T var=Array[0]
?你会用什么来代替
T
?如果您使用了
对象
,在基本体对象数组的情况下它会做什么?它会自动包装它吗?然后我看不出比基于泛型的解决方案有什么优势。每个数组引用(甚至是基元数组上的引用)都是Object类型的(也就是说,数组本身不是基元,它们有一个长度属性)。我没有说使用它有什么特别的优势,我希望性能是一样的(但我没有测试过)。@HonzaZidek是的。的确如此。但它不会修改调用者引用类型。请参阅上面的示例,使用
int
数组。
public static <K> int  length(K[] array){
    return array.length;
}
public static int  length(Object[] array){
    return array.length;
}
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[]