检查变量是否包含数组

时间:2014-11-27 09:43:38

标签: java arrays

我正在尝试在Java中创建一个反转数组或矩阵的方法。方法的代码现在看起来像这样:

@SuppressWarnings("unchecked")
public static <T> T[] reverse(T[] array) {
    T[] ret = Array.newInstance(array.getClass().getComponentType(), array.length);
    for(int i = 0; i < array.length; i++) {
        if (array[i].getClass().getComponentType() != null) {
            ret[array.length - 1 - i] = (T) reverse((T[]) array[i]); // the exception (see below) occurs here
        } else {
            ret[array.length - 1 - i] = array[i];
        }
    }
    return ret;
}

当我尝试使用二维String矩阵运行此方法时,效果很好。现在我尝试使用二维int矩阵,我得到以下异常:

Exception in thread "main" java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;

为什么这段代码适用于String数组,但不适用于int数组?如何修复代码以使用int数组?


@EDIT我刚注意到我问这个问题错了。 * facepalms *我最初想知道的是:如何检查array[i]是否为数组?

1 个答案:

答案 0 :(得分:4)

请改用Integerint原始类型,其中String对象类型

请参阅Restrictions on Generics

  

无法使用原始类型实例化通用类型

另见他们提供的示例:

引用&gt;

class Pair<K, V> {

    private K key;
    private V value;

    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }

    // ...
}

创建Pair对象时,不能用基本类型替换类型参数KV

Pair<int, char> p = new Pair<>(8, 'a');  // compile-time error

&LT;