我意识到泛型冲突的问题在这个网站上已成功多次面对,并且过去给出的建议对我有所帮助,但在这种情况下,我似乎无法确定冲突的根源。 / p>
我的Graph类中的第一个声明给出了一个错误:
error: type argument Vertex<T#1> is not within bounds of type-variable T#2
private AVLTree<Vertex<T>> vertices;
^
where T#1,T#2 are type-variables:
T#1 extends Comparable<T#1> declared in class Graph
T#2 extends Comparable<T#2> declared in class AVLTree
这是Graph类声明和有问题的字段:
public class Graph<T extends Comparable<T>> implements GraphInterface<T> {
private AVLTree<Vertex<T>> vertices;
...
// implemented methods, etc.
...
}
AVLTree类声明:
public class AVLTree<T extends Comparable<T>> { ... }
Vertex类声明:
public class Vertex<T extends Comparable<T>> implements Comparable<Vertex> { ... }
我不明白这里有什么问题。有什么想法吗?
答案 0 :(得分:3)
您只需要Vertex
实施Comparable<Vertex<T>>
:
public class Vertex<T extends Comparable<T>> implements Comparable<Vertex<T>> { ... }
你可以做一些“替换”来找出原因:
AVLTree
具有有界类型参数T extends Comparable<T>
。
在AVLTree<Vertex<T>>
类型中,Vertex<T>
取代T
。
AVLTree
要求T
延长Comparable<T>
,因此如果我们替换:Vertex<T>
需要延长Comparable<Vertex<T>>