我正在尝试在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]
是否为数组?
答案 0 :(得分:4)
请改用Integer
。 int
是原始类型,其中String
是对象类型。
无法使用原始类型实例化通用类型
另见他们提供的示例:
引用&gt;
class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
// ...
}
创建Pair
对象时,不能用基本类型替换类型参数K
或V
:
Pair<int, char> p = new Pair<>(8, 'a'); // compile-time error
&LT;