我目前正在阅读Java Generics,而且在通配符方面我有点陷入困境.
我从Collections类中获得了这个方法:
public voidcopy(List super T> dest, List extends T> src) { for(int i = 0; i < src.size(); i++) { dest.set(i, src.get(i)); } }
然后我被告知有可能像这样调用这个方法:
List
由于类型参数已留给编译器来确定,本书说编译器选择类型参数为Integer.
但那怎么可能呢?
如果它被认为是整数,这意味着在方法声明中 -
List extends T>
将转换为List
.
这是一个错误,还是在考虑泛型时有不同的规则?我用google搜索过,大多数结果都说一个类不能成为它自己的子类.
不,这不是错误.
? extends Integer
表示:任何属于或扩展Integer的类(或实现Integer,如果Integer是接口).
同样适用? super Integer
,这意味着:任何类是Integer或者是Integer的超类或超级接口.