2014-11-27 6 views
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

, поскольку ИНТ не является объектом – mprabhat

ответ

4

Используйте вместо этого Integer. int является примитивным типом, где String является тип объекта.

См Restrictions on Generics:

Невозможно создать универсальных типов с примитивными типами

Смотрите также пример они обеспечивают:

Quote>

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 Спасибо за ваш полезный комментарий. – Maroun

+0

Прошу прощения, я задал этот вопрос неправильно. Ваш ответ - конечно - правильный относительно моих проблем с String [] и int [], но я изначально хотел знать, как я могу проверить, является ли переменная массивом или нет. – mezzodrinker

+1

@ flashdrive2049 'if (someObj.getClass(). IsArray())'? Или 'if (someObj instanceof Object [])' – Maroun

Смежные вопросы