在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的回答,其中提供了一条线索,说明他们为什么会这样决定。无论如何,谢谢你的评论。