【发布时间】:2018-09-30 15:24:46
【问题描述】:
我试图理解为什么我们需要通配符——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());
}
}
结果是一样的,尽管通配符版本更简洁。这是唯一的好处吗?
【问题讨论】:
-
通配符表示“任何类型”。
extends Object在这两种情况下都是多余的。 -
谢谢@user202729。所以
不起作用,但是 有效。为什么不让那个“T”以同样的方式工作呢? -
@shmosel 我知道。我只是用它来测试语法。当然,一切都是对象。
-
那是另一个question。
-
And... cmets 仅用于提出改进建议,不用于扩展讨论或提出其他问题。