类型参数T#1不在类型变量T#2的范围内

时间:2014-12-09 03:35:40

标签: java generics

我意识到泛型冲突的问题在这个网站上已成功多次面对,并且过去给出的建议对我有所帮助,但在这种情况下,我似乎无法确定冲突的根源。 / 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> { ... }

我不明白这里有什么问题。有什么想法吗?

1 个答案:

答案 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>>