我不确定我是否在为编写的方法正确使用泛型。我正在使用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中使用泛型,因此对此深有体会。
答案 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);