15

我有以下代码,但我对所有泛型感到困惑。

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

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

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

3 回答 3

45

你对编译器说:

<T>

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

List<T>

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

List<? super T> input

“这个方法将接受一个名为 的参数input,它是一个List包含类型的元素T,或者是 的任何超类型T。例如,如果TInteger,则input可能是List<Integer>List<Number>List<Object>。”

于 2012-07-03T03:48:22.650 回答
2

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

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

于 2013-11-14T17:05:22.773 回答
2

除了保罗的回答,这可能更清楚,如果你有一些在其定义中声明了通用参数的类,你可以编写通用方法,如

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

否则,如果你的类没有声明泛型参数(或者你想定义额外的参数),你应该这样定义你的方法:

public class SampleClass{
    public static <T> List<T> backwards (List<? super T> input){...}
}
于 2020-07-03T13:57:22.157 回答