【发布时间】:2010-08-15 08:19:09
【问题描述】:
最近,我读到了这篇文章: http://download.oracle.com/javase/tutorial/extra/generics/wildcards.html
我的问题是,不要创建这样的方法:
public void drawAll(List<? extends Shape> shapes){
for (Shape s: shapes) {
s.draw(this);
}
}
我可以创建一个这样的方法,而且效果很好:
public <T extends Shape> void drawAll(List<T> shapes){
for (Shape s: shapes) {
s.draw(this);
}
}
我应该使用哪种方式?通配符在这种情况下有用吗?
【问题讨论】:
-
?是一种速记符号;无论如何,内部编译器都会用类型参数替换它;当出现编译器错误时,您会看到代理类型参数,而不是 ?
-
更正:我之前的评论是错误的。通配符比我想象的要复杂。
-
@irreputable 虽然确实更复杂,但您关于用类型参数替换它的观点是完全有效的;它只是一个你不能声明的。
-
如果我们看just这两种方法 - 没有区别,只是风格问题;否则(如果你添加一些更通用的参数),事情会改变
标签: java api generics bounded-wildcard