This question already has an answer here:
Java generics issue: Class “not within bounds of type-variable” error.
(1个答案)
4年前关闭。
我意识到泛型类型冲突的问题已经在此站点上成功解决过很多次,过去所提供的建议对我有帮助,但是在这种情况下,我似乎无法确定冲突的根源。
我的Graph类中的第一个声明给了我一个错误:
这是Graph类声明和有问题的字段:
AVLTree类声明:
和顶点类声明:
我看不出这里有什么问题。有任何想法吗?
您可以做一些“替换”来找出原因:
在类型
(1个答案)
4年前关闭。
我意识到泛型类型冲突的问题已经在此站点上成功解决过很多次,过去所提供的建议对我有帮助,但是在这种情况下,我似乎无法确定冲突的根源。
我的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>> { ... }
和顶点类声明:
public class Vertex<T extends Comparable<T>> implements Comparable<Vertex> { ... }
我看不出这里有什么问题。有任何想法吗?
最佳答案
您要做的就是使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>>