如何在Java中扩展接口合法?

时间:2016-01-25 06:42:57

标签: java

Comparable被定义为接口。在这种情况下,为什么Key K extends Comparable<K>在以下情况下合法,为什么不使用K implements Comparable<K>

public class Entry<K extends Comparable<K>, V> implements Comparable<Entry<K, V>> { ... }

例如,这种代码用于有序符号表中。

2 个答案:

答案 0 :(得分:4)

好吧,K可以是一个扩展Comparable<K>的接口,而不是实现它的类......在这种情况下,extends会更合适。由于Entry声明知道 K是接口类型还是类类型,因此在任何情况下都不对。

最终,这只是为表达泛型边界提供了简单而一致的语法,而不必担心上限是一个类还是一个接口。

答案 1 :(得分:3)

Because "extends" in this context is different.

  

请注意,在此上下文中,extends在一般意义上用于表示“扩展”(如在类中)或“实现”(如在接口中)。

这是仿制药的其他细微差别之一;关键字extendssuper扮演非常不同的角色,这些角色非常类似于泛型。在这种情况下,extends表示上限;您保证K最多 一个Comparable

The Java Trails tutorial on generics为此提供了大量的进一步背景。