什么是static <T> List <T> methodName(List <?super T> input)

use*_*497 16 java generics

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

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

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

static <T> List<T> backwards (List<? super T> input)
Run Code Online (Sandbox Code Playgroud)

Pau*_*ora 41

你是对编译器说的:

<T>
Run Code Online (Sandbox Code Playgroud)

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

List<T>
Run Code Online (Sandbox Code Playgroud)

"此方法将返回List包含该类型元素的内容T."

List<? super T> input
Run Code Online (Sandbox Code Playgroud)

"这种方法将需要一个名为参数input,这是一种List类型的包含元素T,或任何超类型的T.例如,如果TInteger,input可以是一个List<Integer>,List<Number>List<Object>".

  • 这并没有解决方法签名`public static <T> List <T>`与`public static List <T>`的比较. (5认同)
  • @agarrett`public static List <T>`不声明类型参数,因此必须已经在声明类的泛型类型参数`T`的范围内.但问题甚至没有提到,所以我不明白为什么你提起它. (2认同)