我有以下代码,但我对所有泛型都很困惑。
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)
答案 0 :(得分:38)
您对编译器说:
<T>
“我正在为这个方法声明一个任意类型T
,对于每个方法的调用,它可以是任何(非原始的)。”
List<T>
“此方法将返回包含List
类型元素的T
。”
List<? super T> input
“此方法将采用名为input
的参数,List
包含T
类型的元素或T
的任何超类型。例如,如果T
为Integer
,则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)
}