泛型转换器-我是否正确使用泛型?

时间:2018-11-16 17:02:52

标签: java android retrofit2

我不确定我是否在为编写的方法正确使用泛型。我正在使用Retrofit的responseBodyConverter()方法。到目前为止,我具有以下实现:

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

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

我的问题是:我可以使用ParameterizedType.class来满足Type的{​​{1}}要求吗?我以为可以使用responseBodyConverter()作为类型参数来实现此目的,但是我尝试的所有操作均无效:T,仅传递了T.class,等等。

我最终想要的是提供一种方法,该方法可以为我定义的不同类型的类提供一个转换器。我不想定义多个方法,这些方法基本上只针对不同类型的转换器执行相同的操作。我经常在Java中使用泛型,因此对此深有体会。

1 个答案:

答案 0 :(得分:1)

由于类型擦除,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);