嗨,我有下一堂课
public class ApiResponse<T extends ApiResponseData >
当T
是ApiResponseData
的一种类型时,但有时我会收到列表而不是对象,在这种情况下,我需要将T
从ApiResponseData
或List<ApiResponseData>
扩展,怎么能做到这一点?
我的尝试
public class ApiResponse<T extends ApiResponseData || T extends List<ApiResponseData>>
我认为您对泛型类型参数的目的有根本的误解。为什么您认为需要更改类型参数以适应列表?
为什么这样的东西还不够?
class ApiResponse<T extends ApiResponseData>
{
final List<T> data;
ApiResponse(T datum)
{
data = Collections.singletonList(datum);
}
ApiResponse(List<T> data)
{
this.data = data;
}
}
这是不可能的,因为 java 决定在类型擦除期间使用哪个类是模棱两可的。您可以使用 Generic 来指定约束,例如 T 需要是多个类的子类,例如 (A & B),例如<T extends A & B>
但您的用例是不可能的。
您可以等待public class ApiResponse<T extends List<ApiResponseData> >
并将T extends ApiResponseData
情况视为调用此方法时的一个元素的列表(在您的代码中更高)