我希望能够将任何数组类型作为方法中的参数。:
public void foo(Array[] array) {
System.out.println(array.length)
}
有没有办法在同一个方法中传递String []或int []数组?
答案 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[]