如何将泛型类型传递给泛型方法?
How can I pass generic type to generic methode?
我有一个通用的 class,类似于下面的内容
//Un modifiable source
public AbstractJsonWebserviceConnector<T extends JsonRequest, U>{
public U getResponse(T request, Class<U> responseType) throws Exception {
//Do Some stuff
}
}
另一个class扩展如下
public class GenericConnector<T> extends AbstractJsonWebserviceConnector<JsonRequest, T> {
public T process(JsonRequest request, Class<T> tClass) throws Exception {
return this.getResponse(request, tClass);
}
}
M我可以将它转换成如下所示以避免额外的参数 Class tClass 吗?
public class GenericConnector<T> extends AbstractJsonWebserviceConnector<JsonRequest, T> {
public T process(JsonRequest request) throws Exception {
return this.getResponse(request, typeof(T));
}
}
public T process(JsonRequest request, Class... tClass), 这将支持 none 或一个对象 Class
这里有一个技巧,虽然它很丑。
public class GenericConnector<T> extends AbstractJsonWebserviceConnector<JsonRequest, T> {
public T process(JsonRequest request) throws Exception {
return this.getResponse(request, (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}
}
我有一个通用的 class,类似于下面的内容
//Un modifiable source
public AbstractJsonWebserviceConnector<T extends JsonRequest, U>{
public U getResponse(T request, Class<U> responseType) throws Exception {
//Do Some stuff
}
}
另一个class扩展如下
public class GenericConnector<T> extends AbstractJsonWebserviceConnector<JsonRequest, T> {
public T process(JsonRequest request, Class<T> tClass) throws Exception {
return this.getResponse(request, tClass);
}
}
M我可以将它转换成如下所示以避免额外的参数 Class
public class GenericConnector<T> extends AbstractJsonWebserviceConnector<JsonRequest, T> {
public T process(JsonRequest request) throws Exception {
return this.getResponse(request, typeof(T));
}
}
public T process(JsonRequest request, Class... tClass), 这将支持 none 或一个对象 Class
这里有一个技巧,虽然它很丑。
public class GenericConnector<T> extends AbstractJsonWebserviceConnector<JsonRequest, T> {
public T process(JsonRequest request) throws Exception {
return this.getResponse(request, (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}
}