现有一个方法:
public static void methodA(Object[] params){
...
}
如果我这样用:
long[] pl = ...
int[] pi = ...那么 methodA(pl) 或 methodA(pi) 会语法报错的----------所以:我怎样写 methodA 的参数才可以 让 methodA 接受 long[] 或 int[] 或 String[] 及其他类型的数组
public static void methodA(Object[] params){
...
}
如果我这样用:
long[] pl = ...
int[] pi = ...那么 methodA(pl) 或 methodA(pi) 会语法报错的----------所以:我怎样写 methodA 的参数才可以 让 methodA 接受 long[] 或 int[] 或 String[] 及其他类型的数组
...
}
methodA(pi);
}
static int[] pi = ...
public static void methodA(Object[] params) {
}
public static void mathodA(long[] params) {
}
public static void methodA(double[] params) {
}
将所有的基本类型各写一个重载方式,这个方法比较麻烦。第二种方式:利用commons-lang库
int[] pi = ...
Integer[] objPi = ArrayUtils.toObject(pi);
methodA(objPi);
方法要求参数是对象数组。但long[] 和int[]是基本类型数组。可以将基本类型打包,即:
int[] -> Integer[]
long[] -> Long[]
再作为参数传入。
你的参数是object[] 对象数组
long[] pl = ...
int[] pi = ...
是基本数据类型的数组?
明显不匹配。
Integer【】
String[]
即可
你看看JDK自己的做法就知道了,你这种情况,JDK是这样做的:
定义
method(Object[] param)
method(int[] param)
method(long[] param)
method(double[] param)
....
你去看看 java.util.Arrays这个类的源代码
在java里面,数据只有2种存在模式:对象(Object)和基础数据类型(Primitive data type)
而基础数据类型的数组也是对象,也就是说 int[]是一个对象
而Object[]是对象的数组
很显然 一个对象≠对象数组