Java 为什么<;?扩展接口>;而不是<;?实现接口>;

Java 为什么<;?扩展接口>;而不是<;?实现接口>;,java,generics,interface,Java,Generics,Interface,我有以下代码: ArrayList<? extends IValues> valuesList ??这对用户来说会更清楚,不是吗?在Java中泛型就是这样设计的 请注意,这里也使用了super关键字,但它的含义与外部泛型完全不同。在这种情况下,使用哪个关键字的语法选择很可能是任意的。这只是一个标记,表示type参数必须是IValues的子类型。这是用扩展编写的,用于继承,而实现用于接口 就我个人而言,我发现最好对两个类和接口使用一个关键字,而不是两个不同的关键字。而且extends

我有以下代码:

ArrayList<? extends IValues> valuesList

??这对用户来说会更清楚,不是吗?

在Java中泛型就是这样设计的


请注意,这里也使用了
super
关键字,但它的含义与外部泛型完全不同。

在这种情况下,使用哪个关键字的语法选择很可能是任意的。这只是一个标记,表示type参数必须是
IValues
的子类型。这是用
扩展
编写的,用于继承,而
实现
用于接口

就我个人而言,我发现最好对两个类和接口使用一个关键字,而不是两个不同的关键字。而且
extends
是一个不错的选择,特别是因为您在接口中也使用它:

interface ISpecialValues extends IValues {
    ...
}

无论是
扩展
还是
实现
,都没有什么意义,因为前Java5中熟悉的含义在这两种情况下都不适用。类比的含义实际上是巧合,语言设计者受到不引入新关键字的强烈限制。

该表达式的目的是确定一个类/接口是否继承自
IValues
(或另一个类/接口)。我猜他们不会使用关键字
implements
,因为关键字
扩展了
implements
可以解决相同的问题


关键字
extends
super
分别用于确定类/接口是其他类的子类还是基类。

您认为
ArrayList
是否与您建议的约束匹配?这只是任意的语言设计选择。
interface ISpecialValues extends IValues {
    ...
}