Проверьте, содержит ли переменная массив

1

Я пытаюсь создать метод в 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] является массивом или нет?

  • 0
    потому что int не является объектом
Теги:
arrays

1 ответ

4
Лучший ответ

Вместо этого используйте 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

<

  • 0
    @DavidWallace Спасибо за ваш полезный комментарий.
  • 0
    Извините, я задал этот вопрос неправильно. Ваш ответ - конечно - правильный, касающийся моих проблем с String [] и int [], но я изначально хотел узнать, как я могу проверить, является ли переменная массивом или нет.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню