什么是static <t> List <t> methodName(List <! - ?super T - > input)</t> </t>

时间:2012-07-03 02:26:25

标签: java generics

我有以下代码,但我对所有泛型都很困惑。

public static <T> List<T> backwards (List<? super T> input) {  
       List<T> output = new ArrayList<T>();  
       return output;  
}

我的理解是我有一个名为backwards的公共方法,它创建一个实现List接口并返回arraylist的arraylist。我的问题是实际上我对编译器说的是以下部分......

static <T> List<T> backwards (List<? super T> input)

3 个答案:

答案 0 :(得分:38)

您对编译器说:

<T>

“我正在为这个方法声明一个任意类型T,对于每个方法的调用,它可以是任何(非原始的)。”

List<T>

“此方法将返回包含List类型元素的T。”

List<? super T> input

“此方法将采用名为input的参数,List包含T类型的元素或T的任何超类型。例如,如果TInteger,则input可以是List<Integer>List<Number>List<Object>。“

答案 1 :(得分:1)

这是您声明通用方法的方法。请阅读以下部分,它将为您提供所需的一切。

http://docs.oracle.com/javase/tutorial/extra/generics/methods.html

答案 2 :(得分:1)

除了Paul's answer之外,这可能更清楚一些,如果您有一些类在其定义中声明了Generic参数,则可以编写诸如

的泛型方法
combineLatest(this.filtersList.map((f) => f.filtersChanges)).subscribe((data) => {
});

否则,如果您的类未声明泛型参数(或您想定义其他参数),则应按以下方式定义方法:

public class SampleClass<T>{
  public static List<T> backwards (List<? super T> input)
}