what is the difference between 'super' and 'extends' in Java Generics
我正在努力学习Java泛型。我不清楚你什么时候使用
我在sun.com上读过一些教程,但我还是迷路了。有人能举例说明吗?
谢谢!
它取决于它允许的继承层次结构。假设您有一个类"child",它继承自"parent",它继承自"grandparent"。
参见有效Java第二版,项目28:
胸肌
生产者扩展,消费者超级
如果您的参数是生产者,则应该是
看看谷歌的收藏,他们知道如何使用它,因为他们得到了bloch;)
有三种类型的通配符:
? extends Type 表示Type 型亚型家族。这是最有用的通配符。? super Type :表示Type 型超类型的族。? :表示所有类型或任何类型的集合。
小精灵
对我来说,最好的答案来自@bsingh,当时我读了鲍勃叔叔的文章。我在这里复述,文章的结论。
每当要写入列表时,请使用list
When you put an Object to the List, all you care about is that the object is of a type that is compatible with type held by the list. So you want the list to take the type of that object or any of the superclasses of that object.
号
每当您要从列表中读取时,使用list
On the other hand, when you read from a list, you want the type you are reading to be the type contained byt the list, or a derivative from that type.
号
如果您询问的是类型参数,那么Java中没有EDCOX1×7构造。有界参数只能扩展一种以上的类型。例如
1 2 3 4 | public class MyClass< T extends Closeable & Runnable > { // Closeable and Runnable are chosen for demonstration purposes only } |
在这种情况下,如果您看到
1 2 3 4 5 |
号
对于有界通配符,请阅读本文。请阅读"获得投入原则"部分。基本上,
记住,PECS-生产商扩展了消费者支持。此外,鲍勃叔叔在他的工匠系列中也讨论得很好。请访问http://objectmentor.com/resources/articles/the_Craftsman_44_uu brown_bag_i.pdf