通用方法不起作用

时间:2010-02-26 18:14:39

标签: java generics

我正在尝试使用此方法,但我在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;
}

3 个答案:

答案 0 :(得分:1)

适用于所有课程。它不适用于基元(intlong等)。

因此,不使用原始数组而是使用包装类:使用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可以工作。无论涉及泛型,原始类型都是不可行的。