什么是<e extends =“”number =“”> List <! - ? super E - > java中返回类型的方法</e>

时间:2013-12-01 03:39:09

标签: java generics collections return-type

我正在阅读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 是正确的

1 个答案:

答案 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.