Как создать универсальный метод для возврата универсального типа

#java #generics #jackson

#java #дженерики #джексон

Вопрос:

Теперь у меня есть следующий метод

 private classResponse getClassResponse(final Response response) {
        try {
            return mapper.readValue(mapper.writeValueAsString(response.getEntity()), classResponse.class);
        } catch (IOException e) {
            log.error("Error while mapping object: {} to classResponse with cause", response.getEntity(), e);
        }
        return null;
    }
 

Но для каждого отдельного класса я должен создать новый метод для преобразования ответа в класс

Есть ли какой-нибудь способ сделать это универсальным, имея еще один аргумент для имени класса, в который я хочу преобразовать?

Комментарии:

1. Напишите универсальный метод с a class в качестве параметра.

2. @SuppresWarnings("unchecked") private <T> T getResponse(final Response response, Class<T> tClass) { ... return (T) ...; }

3. @AnatolyG readValue нуждается в классе во время выполнения, чтобы знать, каким классом должен быть экземпляр, который он создает.

4. Какой у вас вопрос о написании универсального метода?

5. @tgdavies тогда фрагмент dbl должен работать. Но, с моей точки зрения, подобный API говорит, что введите любой тип, и вы получите результат такого типа / я могу работать с любыми типами, но это не похоже на правду. Я бы предпочел иметь несколько методов с определенным / закрытым набором поддерживаемых типов, определенных в / по их сигнатурам

Ответ №1:

Спасибо @dbl за помощь. Подводя итог приведенному ниже ответу,

 private <T> T getResponse(final Response response, final Class<T> className) {
        try {
            return mapper.readValue(mapper.writeValueAsString(response.getEntity()), className);
        } catch (IOException e) {
            log.error("Error while mapping object: {} to class with cause", response.getEntity(), e);
        }
        return null;
    }