我正在设计BinarySearchTree的实现,尽管遇到了我从未遇到过的问题。我对如何解决这个问题也不太了解:
The type K is not a valid substitute for the bounded parameter <K extends Comparable<? super K>> of the type BST<K,V>
这是在创建名为BST<K extends Comparable<? super K>, V>
的抽象类,然后又扩展了名为RectangleBST<K,V>
的另一个类后遇到的错误。所以RectangleBST<K,V> extends BST<K,V>
,但是当我使用BST<K, V>
时,我得到了错误。
一种解决方案是使用扩展BST<Integer, Rectangle>
,但这是否意味着我现在继承了专门用于Integer键类型和Value of Rectangle类型方法?
另一种可能是在RectangleBST中具有可比性,尽管我认为我的计划是比较BST中的键而不是RectangleBST?
答案 0 :(得分:2)
通用类型参数不必命名相同,因此为了更好地了解它们之间的区别,让我们重命名它们:
BST<A extends Comparable<? super A>, B>
RectangleBST<C, D> extends BST<C, D>
工作原理类似于函数调用:
bst(int a, int b)
rectangleBst(int c, int d) {
bst(c, d);
}
但是,它仅在c
与a
兼容的情况下有效。我的意思是,如果C
与A
兼容。
不是这样,因为C
可以是任何类型,甚至是没有实现/扩展Comparable
的类型。由于A
需要type参数来实现/扩展Comparable
,因此C
不兼容。
要使其兼容,还需要将C
限制为实现/扩展Comparable
的类型:
RectangleBST<C extends Comparable<? super C>, D> extends BST<C, D>
现在C
与A
兼容。
好吧,现在使用您想要的名称:
BST<K extends Comparable<? super K>, V>
RectangleBST<K extends Comparable<? super K>, V> extends BST<K, V>
请记住,K
中的RectangleBST
与K
中的K
不是相同 BST
。是与K
映射到K
中的BST
的{{1}}不同,与C
被映射到A
一样。