Class<List<T>> != Class<T> или как в Unirest массив дессериализовать

445
04 сентября 2017, 05:14

Есть у меня вот такой обобщённый метод для отправки запроса и получения сразу десериализованного объекта.

public static <T> T get(String url, Class<T> type){
    try {
        return Unirest
                .get(ShikiConst.ROOT_API + url)
                .header("User-Agent", Client.getUserAgent())
                .asObject(type)
                .getBody();
    }
    catch (Exception ex){
        System.out.println("QueryShell.get(): " + ex.getMessage());
        return null;
    }
}

Вызываю его так: QueryShell.get("url", MyClass.class);
QueryShell - это класс, в котором метод находится.

Всё прекрасно работает, пока мне не надо получить массив. Потому что когда я пытаюсь вызвать QueryShell.get("url", List<MyClass>.class);, то оно не работает.

Я погуглил и выяснил, что можно сделать так:

Class<List<MyClass>> type = (Class) List.class;
List<MyClass> obj = QueryShell.get("url", type);

Но оказалось, что для Java есть разница что у меня прячется под T. Ибо он мне выдаёт Found: 'Class<List<MyClass>>', required: 'Class<T>' (код ошибки упрощён, убрал полные имена с пакетами).

Мне теперь методы отдельно для массивов плодить? =(

UPD: Попробовал вот так:

Class<ArrayList<MyClass>> type = (Class) ArrayList.class;
ArrayList<MyClass> obj = QueryShell.get("url", type);

Ошибка теперь говорит почти тоже самое, только про ArrayList:
Found: 'Class<ArrayList<MyClass>>', required: 'Class<T>'

Попробовал также QueryShell.get("url", MyClass[].class);. Ошибка аналогичная:
Found: 'Class<MyClass[]>', required: 'Class<T>'

UPD2: Ошибка оказалась совершенно в другом, но IDEA почему-то показывала именно на это. После исправления заработали все вышеуказанные способы.

READ ALSO
Захват звука с мишкера

Захват звука с мишкера

Доброго времени суток , Нужна помощь как захватить звук с мишкера системы?

471
Передача оъекта из фрагмента в активити

Передача оъекта из фрагмента в активити

Есть фрагмент, в котором находится ListViewПри клике на элемент списка идет вызов другого активити

447
Вывести не полный список товаров jsp

Вывести не полный список товаров jsp

Мне нужно вывести не полный список товаров на страницеТо есть их, например, в сумме 40, и я хочу, чтобы первоначально показывалось 10, и нажимая...

350