我正在阅读OCJP问题,我发现了一个问题,即下面的方法签名。
public static <E extends Number> List<? super E> process(List<E> nums)
我想知道什么是返回类型或写为返回类型的<E extends Number> List<? super E>
的含义。
让我提出完整的问题。
给定一个声明为:
的方法public static <E extends Number> List<? super E> process(List<E> nums)
程序员想要使用这样的方法:
//在此插入声明
output = process(input);
可以在
放置哪些声明对//在此插入声明
允许 要编译的代码? (选择所有适用的选项。)
一个。
ArrayList<Integer> input = null;
ArrayList<Integer> output = null;
乙
ArrayList<Integer> input = null;
List<Integer> output = null;
下进行。
ArrayList<Integer> input = null;
List<Number> output = null;
d
List<Number> input = null;
ArrayList<Integer> output = null;
电子。
List<Number> input = null;
List<Number> output = null;
F。
List<Integer> input = null;
List<Integer> output = null;
-G。以上都不是。
答案:
B,E, 和 F 是正确的
答案 0 :(得分:1)
对于此泛型方法,返回类型由参数类型确定。参数可以是List<Number>
和Number的子类型列表。例如,如果您使用此arg调用进程
List<Integer> list = ...
process(list)
返回类型为List<? super Integer>
。 ? super
的通用类型只能分配给? super
List<Integer> input = null;
List<? super Integer> output = process(input);
它不能是List<Number>
或List<Object>
,因为它们允许编写泛型参数的子类。例如List<Number> list
允许list.add(1L);
正确答案是G.