Comparable
被定义为接口。在这种情况下,为什么Key K extends Comparable<K>
在以下情况下合法,为什么不使用K implements Comparable<K>
?
public class Entry<K extends Comparable<K>, V> implements Comparable<Entry<K, V>> { ... }
例如,这种代码用于有序符号表中。
答案 0 :(得分:4)
好吧,K
可以是一个扩展Comparable<K>
的接口,而不是实现它的类......在这种情况下,extends
会更合适。由于Entry
声明知道 K
是接口类型还是类类型,因此在任何情况下都不对。
最终,这只是为表达泛型边界提供了简单而一致的语法,而不必担心上限是一个类还是一个接口。
答案 1 :(得分:3)
Because "extends" in this context is different.
请注意,在此上下文中,
extends
在一般意义上用于表示“扩展”(如在类中)或“实现”(如在接口中)。
这是仿制药的其他细微差别之一;关键字extends
和super
扮演非常不同的角色,这些角色非常类似于泛型。在这种情况下,extends
表示上限;您保证K
最多 一个Comparable
。
The Java Trails tutorial on generics为此提供了大量的进一步背景。