Enumeration <?之间有区别吗?扩展ZipEntry>和Enumeration
当你得到其中一个时,你可以做什么没有实际的区别,因为type参数只用在"输出"位置.另一方面,在你可以作为其中一个使用的方面有很大的不同.
假设你有一个Enumeration
- 你无法将它传递给一个Enumeration
作为其参数之一的方法.你可以把它传递给一个方法Enumeration extends ZipEntry>
.
当你有一个在输入和输出位置使用type参数的类型时更有趣 - List
这是最明显的例子.以下是参数变化的三个方法示例.在每种情况下,我们都会尝试从列表中获取一个项目,然后添加另一个项目.
// Very strict - only a genuine Listwill do public void Foo(List list) { T element = list.get(0); // Valid list.add(element); // Valid } // Lax in one way: allows any List that's a List of a type // derived from T. public void Foo(List extends T> list) { T element = list.get(0); // Valid // Invalid - this could be a list of a different type. // We don't want to add an Object to a List list.add(element); } // Lax in the other way: allows any List that's a List of a type // upwards in T's inheritance hierarchy public void Foo(List super T> list) { // Invalid - we could be asking a List
有关详细信息,请阅读:
泛型的Java语言指南
Java泛型教程(PDF)
Java泛型FAQ - 特别是关于通配符的部分