Я пытаюсь создать метод в 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;
}
Когда я попытался запустить этот метод с 2-мерной матрицей String
, это получилось хорошо. Теперь я попытался использовать 2-мерную матрицу int
и я получаю следующее исключение:
Exception in thread "main" java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;
Почему этот код работает со String
массивами, но не с массивами int
? Как я могу исправить код для работы с массивами int
?
@EDIT Я только заметил, что я задал этот вопрос неправильно. * facepalms * То, что я изначально хотел узнать, это: как проверить, array[i]
является массивом или нет?
Вместо этого используйте Integer
. int
- это примитивный тип, где String
- тип объекта.
См. Ограничения на общие характеристики:
Невозможно создавать типичные типы с примитивными типами
См. Также пример, который они предоставляют:
Цитата>
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
<