Создание Collection с reflection Type

209
11 декабря 2017, 15:12

Есть метод, который возвращает List< String > (возможен любой объект), но я не знаю об этом и выясняю тип следующим способом:

Type returnType = ((ParameterizedType)entry.getGenericReturnType()).getActualTypeArguments()[0];

Потом я хочу создать TypeReference, в котором будет Collection, но я не могу, пишет : "can not fynd symbol".

TypeReference typeReference = new TypeReference<Collection<returnType>>() { };

Этот референс нужен для получения объектов из файла что бы jackson преобразовал данные в массив нужных мне объектов.

final File file = new File(path);
FileUtils.createFileWithParentDir(file);
FileUtils.createAndFillIfMissingOrEmpty(file, Collections.singletonList("[]"));
data = objectMapper.readValue(file, typeReference);

Как мне создать Collection по подобию уже существующего метода?

Answer 1

Попробуй использовать метод Objectmapper.#getTypeFactory. Примерно так

ObjectMapper objectMapper = new ObjectMapper();
TypeFactory typeFactory = objectMapper.getTypeFactory();
Type returnType = ((ParameterizedType)entry.getGenericReturnType()).getActualTypeArguments()[0];
List<Object> someClassList = objectMapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, (Class)returnType));

Обрати внимание, что объявление someClassList не содержит явного типа, однако все объекты в коллекции будут фактически иметь нужный тебе тип.

Оригинал ответа

Answer 2

Можно использовать генерацию класса по имени и Generic Method.

    public static void main(String[] args) throws Exception {
        Method method = A.class.getDeclaredMethod("a");
        Type returnType = method.getGenericReturnType();
        Class clazz = Class.forName(returnType.getTypeName());
        TypeReference typeReference = createTypeReference(clazz);
    }
    static <T> TypeReference<Collection<T>> createTypeReference(Class<T> clazz) {
        return new TypeReference<Collection<T>>() {
        };
    }
READ ALSO
Как реализовать мини-бд вопрос-ответ?

Как реализовать мини-бд вопрос-ответ?

Я даже не могу нормально написать заголовок вопроса, тк

208
Cоздание объекта класса HWPFDocument

Cоздание объекта класса HWPFDocument

При попытке создания объекта класса, не выходит создать объект класса, ссылаясь на:

206
Внешнее отсечении формы окном

Внешнее отсечении формы окном

Добрый день! Не могу решить данную задачу, буду очень признателенНеобходимо выполнить внешнее отсечение пятиугольника окном на основе алгоритма...

180
Fragment не обновляется

Fragment не обновляется

У меня 2 Activity на одном RecyclerView, на другом FragmentВ Activity в котором RecyclerView все хорошо работает, он заполняется

186