所以我一直在从java库创建一个System.arraycopy ....方法,但是我把这个对象用作数组时遇到了问题。这里的问题是arr2需要一个数组,但是找到了java.lang.Object。
这是代码:
public static void arrayCopy (Object arr1 ,int pos1,Object arr2,int pos2,int limit){ for (int i = 0; i < limit; i++) { *arr2[pos2]=arr1[pos1];* pos2++; pos1++; } }
我试过这样做:
public static void arrayCopy (Object arr1[] ,int pos1,Object arr2[],int pos2,int limit){ for (int i = 0; i < limit; i++) { arr2[pos2]=arr1[pos1]; pos2++; pos1++; } }
问题是该方法需要一个Object []所以当我想这样做时会出现错误:
public static void main(String[] args) { int[] a = new int [] {1,2,3}; int[] b = new int [] {4,5,6}; *arrayCopy(a, 0, b, 0, 3);* }
它说“实际参数int []不能通过方法调用转换”转换为java.lang.Object []。我的问题是,怎么可以这样使用数组?或者我该怎么办?
答案 0 :(得分:2)
int[]
不是Object[]
。
如果要实现接受任何类型数组的方法,可以使用与System.arrayCopy()
相同的签名,并使用反射来选择适当的实现。
public static void arrayCopy (Object arr1 ,int pos1,Object arr2,int pos2,int limit){
if ( (arr1 instanceof int[]) && (arr2 instanceof int[]) ) {
int[] iArr1 = (int[]) arr1;
int[] iArr2 = (int[]) arr2;
...
}
else if ( arr1 instanceof long[]) && (arr2 instanceof long[]) ) {
long[] iArr1 = (long[]) arr1;
long[] iArr2 = (long[]) arr2;
...
}
// ... etc.
也就是说,如果你想要一个通用方法,那么考虑使用标准方法System.arrayCopy()
是值得的。
答案 1 :(得分:0)
当您将int
数组传递给arrayCopy
方法时,您需要将参数用作int
数组而不是Object
或Object
数组。只需从
public static void arrayCopy (Object arr1[] ,int pos1,Object arr2[],int pos2,int limit){
到
public static void arrayCopy (int arr1[] ,int pos1,int arr2[],int pos2,int limit){
答案 2 :(得分:0)
我写了这个方法,并没有必要为每种类型的数组声明一个特殊的实现,我只需要使用Object类,因为Object类是类层次结构的根。每个类都将Object作为超类。
所以我只这样做了:
public static void arrayCopy (Object arr1 ,int pos1,Object arr2,int pos2,int limit){ if (( arr1 instanceof Object) && (arr2 instanceof Object)) { Object[] oArr1 = (Object[]) arr1; Object[] oArr2 = (Object[]) arr2; for (int i = 0; i < limit; i++) { oArr2 [pos2]=oArr1[pos1]; pos2++; pos1++; } } }