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

asc*_*sco 2 java generics interface

我有以下代码:

ArrayList<? extends IValues> valuesList
Run Code Online (Sandbox Code Playgroud)

IValues是一个interface.该列表填充implementIValues接口的类/对象.我理解这个列表中每个对象的概念必须履行它们实现的接口所规定的合同.为什么java语言不这样做:

ArrayList<? implements IValues> valuesList
Run Code Online (Sandbox Code Playgroud)

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

Kon*_*kov 7

这就是Generics在Java中的设计方式.

请注意,super此处也使用关键字,但它与外部泛型具有完全不同的含义.