参数的Java通用返回子类型集合

时间:2019-01-04 08:51:09

标签: java generics

T:一种类型
C:Collection的子类型
R:T和C的键合的返回

示例:
T = StackOverflow.class
C = List.class
R = List<StackOverflow>

如何在方法签名中使用它?

应该这样写吗?

<T, <C extends Collection>, R extends C<T>> HttpResponse<R> 
process(Class<T> returnType, Class<C> parametrizedReturnType)

我知道C<T>不起作用。

为了做

List<StackOverflow> res = process(StackOverflow.class, List.class)

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

为了避免原始类型(等)的问题,您可以传递类似“原型”对象的内容:

skip_before_action :initialize_objects

因此您可以像这样调用它:

<T, C extends Collection<T>> HttpResponse<C> process(C prototype) {
  ...
}

原型对象的性质取决于您需要在HttpResponse<List<String>> response = process(new ArrayList<>()); 方法中对其进行处理。也许您可以接受一个空列表;也许您需要传递实例的供应商,例如:

process