我正在尝试理解为什么在Java泛型中需要通配符“?”,为什么不能直接使用普通的单字符T或E等作为类型?看下面的例子:
public class App {
public static void main(String[] args) {
App a = new App();
List<String> strList = new ArrayList<String>();
strList.add("Hello");
strList.add("World");
List<Integer> intList = new ArrayList<Integer>();
intList.add(1);
intList.add(2);
intList.add(3);
a.firstPrint(strList);
a.firstPrint(intList);
a.secondPrint(strList);
a.secondPrint(intList);
}
public <T extends Object> void firstPrint(List<T> theList) {
System.out.println(theList.toString());
}
public void secondPrint(List<? extends Object> theList) {
System.out.println(theList.toString());
}
}
虽然通配符版本更为简洁,但结果是相同的。这是唯一的好处吗?
firstPrint
的代码中引用T
。 - Dawood ibn Kareem