Java 泛型和通配符
我正在设计一个BinarySearchTree的实现,尽管我遇到了一个以前从未遇到过的问题。我也不太了解如何解决这个问题:Java 泛型和通配符,java,generics,Java,Generics,我正在设计一个BinarySearchTree的实现,尽管我遇到了一个以前从未遇到过的问题。我也不太了解如何解决这个问题: The type K is not a valid substitute for the bounded parameter <K extends Comparable<? super K>> of the type BST<K,V> 类型K不是有界参数的有效替代物泛型类型参数不必命名相同,因此为了更好地看到差异,让我们重命名它们: B
The type K is not a valid substitute for the bounded parameter <K extends Comparable<? super K>> of the type BST<K,V>
类型K不是有界参数的有效替代物泛型类型参数不必命名相同,因此为了更好地看到差异,让我们重命名它们:
BST<A extends Comparable<? super A>, B>
但是,只有当c
与a
兼容时,它才起作用。我的意思是,如果C
与A
兼容
它不是,因为C
可以是任何类型,甚至是不实现/扩展compariable
的类型。由于A
需要类型参数来实现/扩展Comparable
,C
不兼容
为了使其兼容,您还需要将C
限制为实现/扩展可比的类型:
RectangleBST<C extends Comparable<? super C>, D> extends BST<C, D>
RectangleBST泛型类型参数不必命名相同,因此为了更好地看到差异,让我们重命名它们:
BST<A extends Comparable<? super A>, B>
但是,只有当c
与a
兼容时,它才起作用。我的意思是,如果C
与A
兼容
它不是,因为C
可以是任何类型,甚至是不实现/扩展compariable
的类型。由于A
需要类型参数来实现/扩展Comparable
,C
不兼容
为了使其兼容,您还需要将C
限制为实现/扩展可比的类型:
RectangleBST<C extends Comparable<? super C>, D> extends BST<C, D>
rectangleb使其成为RectangleBST@tsolakp@shmosel。谢谢你的链接。@tsolakp确实修复了它。你能解释一下为什么我最初尝试实现它的方式有什么问题吗?(如果太麻烦的话)谢谢@安德烈亚斯作了很好的解释。我个人认为Java编译器应该能够推断extends
定义中K
的类型RectangleBST@tsolakp@shmosel。谢谢你的链接。@tsolakp确实修复了它。你能解释一下为什么我最初尝试实现它的方式有什么问题吗?(如果太麻烦的话)谢谢@安德烈亚斯作了很好的解释。我个人认为Java编译器应该能够推断extends
定义中K
的类型。我想我明白了!那么``和``之间有区别吗RectangleBST@dan第二个是无效语法。与您不能编写矩形bst(c,d){bst(intc,intd);}
相同。类型/限制必须在声明参数的位置定义,而不是在使用参数的位置定义。我想我明白了!那么``和``之间有区别吗RectangleBST@dan第二个是无效语法。与您不能编写矩形bst(c,d){bst(intc,intd);}
相同。类型/限制必须在声明参数的位置定义,而不是在使用参数的位置定义。
RectangleBST<C extends Comparable<? super C>, D> extends BST<C, D>
BST<K extends Comparable<? super K>, V>
RectangleBST<K extends Comparable<? super K>, V> extends BST<K, V>