我有以下代码:
ArrayList<? extends IValues> valuesListIValues是interface。列表中充满了implement IValues接口的类/对象。我确实理解这个列表中每一个对象的概念,它们必须履行他们实现的接口所规定的契约。为什么java语言不这样做:
ArrayList<? implements IValues> valuesList?这对用户来说会更清楚,不是吗?
发布于 2014-10-13 11:22:03
在这种情况下,使用哪个关键字的语法选择很可能是任意的。它只是一个标记,表示类型参数必须是IValues的一个子类型。这是用extends编写的,用于继承,implements用于接口。
就我个人而言,我发现最好为类和接口使用一个关键字,而不是两个不同的关键字。extends是一个很好的选择,特别是在接口中也使用了它:
interface ISpecialValues extends IValues {
...
}发布于 2014-10-13 11:21:47
这就是泛型是如何用Java设计的。
请注意,这里也使用了super关键字,但它的含义与外部泛型完全不同。
发布于 2014-10-13 11:30:28
extends或implements几乎不适用,因为以前的Java5所熟悉的含义在这两种情况下都不适用。类比的含义实际上是巧合的,迫于语言设计者的强烈限制,不引入新的关键词。
https://stackoverflow.com/questions/26338775
复制相似问题