Универсальный конвертер - правильно ли я использую общий? - PullRequest
0 голосов
/ 16 ноября 2018

Я не уверен, правильно ли я использую дженерики для метода, который пишу.Я использую responseBodyConverter () метод из Retrofit.На данный момент у меня есть следующая реализация:

    public static <T> Converter<ResponseBody, T> getConverter(){

    return sRetrofit.responseBodyConverter(ParameterizedType.class, new Annotation[0]);
}

Мой вопрос: могу ли я использовать ParameterizedType.class для удовлетворения требования Type для responseBodyConverter()?Я думал, что смогу добиться этого, используя T в качестве параметра типа, но все, что я пробовал, не сработало: T.class, просто передав T и т. Д.

То, что я в конечном итоге хочу, - это иметьметод, который предоставит мне конвертер для разных типов классов, которые я определил.Я не хочу определять несколько методов, которые в основном делают одно и то же, только для разных типов конвертеров.Я часто борюсь с дженериками в Java, поэтому любая оценка этого будет принята с благодарностью.

1 Ответ

0 голосов
/ 16 ноября 2018

Из-за стирания типа тип T теряется во время выполнения.Вызывающий абонент должен предоставить Class, например,

public static <T> Converter<ResponseBody, T> getConverter(Class<? extends T> type) {
    return sRetrofit.responseBodyConverter(type, new Annotation[0]);
}

. Затем вызывающий абонент может сделать:

Converter<ResponseBody, String> cvt = getConverter(String.class);

или в Java 10 +:

var cvt = getConverter(String.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...