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

在Java中扩展接口是如何合法的?,java,Java,Comparable被定义为一个接口。在这种情况下,为什么在以下情况下K键扩展可比较合法,为什么不使用K键实现可比较 public class Entry<K extends Comparable<K>, V> implements Comparable<Entry<K, V>> { ... } 公共类条目实现可比较的{…} 例如,这种代码用于有序符号表中 那么,K可以是一个扩展Comparable的接口,而不是一个实现它的类。。。在这种情况下

Comparable
被定义为一个接口。在这种情况下,为什么在以下情况下
K键扩展可比较
合法,为什么不使用
K键实现可比较

public class Entry<K extends Comparable<K>, V> implements Comparable<Entry<K, V>> { ... }
公共类条目实现可比较的{…}

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

那么,
K
可以是一个扩展
Comparable
的接口,而不是一个实现它的类。。。在这种情况下,
扩展
更合适。由于
Entry
的声明不知道
K
是接口类型还是类类型,因此它不可能在所有情况下都正确


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

好吧,
K
可以是扩展
Comparable
的接口,而不是实现它的类。。。在这种情况下,
扩展
更合适。由于
Entry
的声明不知道
K
是接口类型还是类类型,因此它不可能在所有情况下都正确

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

请注意,在此上下文中,
extends
一般用于表示“extends”(在类中)或“implements”(在接口中)

这是仿制药的另一个细微差别;关键字
extends
super
扮演着非常独特的角色,这对于泛型来说非常特殊。在这种情况下,
扩展
表示上限;我们保证
K
最多是一个
可比的

提供了大量进一步的上下文信息。

请注意,在此上下文中,
extends
一般用于表示“extends”(在类中)或“implements”(在接口中)

这是仿制药的另一个细微差别;关键字
extends
super
扮演着非常独特的角色,这对于泛型来说非常特殊。在这种情况下,
扩展
表示上限;我们保证
K
最多是一个
可比的


提供了大量进一步的上下文。

因为您不是在扩展接口,而是在定义泛型,值
K
必须是Comperable.buy的子类。为什么K只通过重写compareTo来实现Comparable还不够?@JitendraKulkarni:为
K
提供的类型参数可以是实现
Comparable
的类。。。或者它可能是另一个接口。它是合法的,因为JLS说它是合法的。替代方案是非法的,因为JLS说它是。它是这样定义的,因为Java设计者就是这样决定设计它的。他们可能有充分的理由,但这是毫无意义的。事实上,除非你打算实现你自己的(类似Java的)语言,否则像这样的问题是没有意义的。@Stephen C:我宁愿理解为什么我要键入一些看起来很奇怪的东西,而不是因为有人任意决定而键入它。请看Jon和Makoto的回答,其中提供了一条线索,说明他们为什么会这样决定。无论如何,谢谢你的评论。因为你不是在扩展接口,你是在用泛型定义,值
K
必须是Comperable.buy的子类。为什么K只通过重写compareTo来实现Comparable还不够?@JitendraKulkarni:为
K
提供的类型参数可以是实现
Comparable
的类。。。或者它可能是另一个接口。它是合法的,因为JLS说它是合法的。替代方案是非法的,因为JLS说它是。它是这样定义的,因为Java设计者就是这样决定设计它的。他们可能有充分的理由,但这是毫无意义的。事实上,除非你打算实现你自己的(类似Java的)语言,否则像这样的问题是没有意义的。@Stephen C:我宁愿理解为什么我要键入一些看起来很奇怪的东西,而不是因为有人任意决定而键入它。请看Jon和Makoto的回答,其中提供了一条线索,说明他们为什么会这样决定。无论如何,谢谢你的评论。