我正在尝试使用此方法,但我在Eclipse中遇到错误,说类型参数不正确,它告诉我更改方法签名。有什么理由吗?
/**Creates an independent copy(clone) of the T array.
* @param array The 2D array to be cloned.
* @return An independent 'deep' structure clone of the array.
*/
public static <T> T[][] clone2DArray(T[][] array) {
int rows=array.length ;
//clone the 'shallow' structure of array
T[][] newArray = array.clone();
//clone the 'deep' structure of array
for(int row=0;row<rows;row++){
newArray[row]=array[row].clone();
}
return newArray;
}
答案 0 :(得分:1)
适用于所有课程。它不适用于基元(int
,long
等)。
因此,不使用原始数组而是使用包装类:使用Integer[][]
而不是int[][]
。
您可以使用commons-lang ArrayUtils.toPrimitive(..)
and ArrayUtils.toObject(..)
在基元及其包装器之间转换数组。
答案 1 :(得分:1)
您发布的copy2DArray
方法似乎与广告一样有效。也许你错误地调用了这个方法?还要确保您没有使用基本类型而不是要复制的数组中的对象。换句话说,请使用Integer
代替int
。
以下是工作方法的示例:
public class Main {
// ...
// Your copy2DArray method goes here
// ...
public static void main(String[] args) {
// The array to copy
Integer array[][] = {
{0, 1, 2},
{3, 4, 5},
{6, 7, 8}
};
// Create a copy of the array
Integer copy[][] = clone2DArray(array);
// Print the copy of the array
for (int i = 0; i < copy.length; i++) {
for (int j = 0; j < copy[i].length; j++) {
System.out.print(copy[i][j] + " ");
}
System.out.println();
}
}
}
此代码将打印:
0 1 2
3 4 5
6 7 8
答案 2 :(得分:0)
当原始类型没有擦除时,您可能正在使用原始类型。即,int.class完全不可能,但Integer.class可以工作。无论涉及泛型,原始类型都是不可行的。