Java Can';t解决';类型参数不在类型变量';错误

Java Can';t解决';类型参数不在类型变量';错误,java,generics,Java,Generics,我有一个泛型类ShortestPathVertex,它实现了Comparable: public class ShortestPathVertex<E extends Number> implements VertexInterface, Comparable<ShortestPathVertex<E>> 我需要创建一个MinPriorityQueue实例,将ShortestPathVertex作为类型参数: public class MinPriority

我有一个泛型类
ShortestPathVertex
,它实现了
Comparable

public class ShortestPathVertex<E extends Number> implements VertexInterface, Comparable<ShortestPathVertex<E>>
我需要创建一个
MinPriorityQueue
实例,将
ShortestPathVertex
作为类型参数:

public class MinPriorityQueue<T extends Comparable<T>>
public static <E extends Number, T extends ShortestPathVertex<E>> void Dijkstra(WeightedDirectedGraph<T, E> G, int s) {
        MinPriorityQueue<T> Q = new MinPriorityQueue<>(G.getVertices(), G.V()); // error
}
public static void Dijkstra(加权方向图G,int s){
MinPriorityQueue Q=新的MinPriorityQueue(G.getVertices(),G.V());//错误
}
编译时会抛出错误:

ShortestPath.java:60: error: type argument T#1 is not within bounds of type-variable T#2
        MinPriorityQueue<T> Q = new MinPriorityQueue<>(G.getVertices(), G.V());
                         ^
  where T#1,E,T#2 are type-variables:
    T#1 extends ShortestPathVertex<E> declared in method <E,T#1>Dijkstra(WeightedDirectedGraph<T#1,E>,int)
    E extends Number declared in method <E,T#1>Dijkstra(WeightedDirectedGraph<T#1,E>,int)
    T#2 extends Comparable<T#2> declared in class MinPriorityQueue
ShortestPath.java:60: error: cannot infer type arguments for MinPriorityQueue<>
        MinPriorityQueue<T> Q = new MinPriorityQueue<>(G.getVertices(), G.V());
                                ^
2 errors
ShortestPath.java:60:error:type参数T#1不在类型变量T#2的范围内
MinPriorityQueue Q=新的MinPriorityQueue(G.getVertices(),G.V());
^
其中T#1,E,T#2是类型变量:
T#1扩展了Dijkstra方法(WeightedDirectedGraph,int)中声明的最短路径顶点
E扩展方法Dijkstra(WeightedDirectedGraph,int)中声明的数字
T#2扩展了类MinPriorityQueue中声明的可比性
ShortestPath.java:60:错误:无法推断MinPriorityQueue的类型参数
MinPriorityQueue Q=新的MinPriorityQueue(G.getVertices(),G.V());
^
2个错误
考虑到
ShortestPathVertex
实现了
Comparable
,我不明白它在抱怨什么。为什么说
最短路径顶点
不在
可比
的范围内?我该如何修复它。我正在使用Java 7.0。

更改此行

public class MinPriorityQueue<T extends Comparable<T>>
公共类最小优先级队列
为此:

public class MinPriorityQueue<T extends Comparable<? super T>>

public class minpriorityqueue您是否尝试过更新的Java编译器?Java 7在这一点上是绝对过时的。我在这里找不到错误,所以除非这是旧编译器的问题(9之前的Java在泛型推理中存在一些相当愚蠢的陷阱),否则我就被难住了。@chrylis我使用的是一台安装了Java 7版的旧笔记本电脑,没有尝试新版本。我更希望有一个能与所有版本的java一起工作的代码。那么,如果在调用
Dijkstra
的地方使用类型见证,会发生什么呢?(顺便注意,关于变量和成员的命名,您没有遵循Java代码约定。)@chrylis抱歉,我不知道什么是“类型见证”,我在泛型方面没有那么先进。(我应该遵循代码格式指南,但这段代码只是CLRS手册中算法的实践,我试图让命名与伪代码类似:))谢谢你的解决方案工作得很好。请您详细说明一下
,这样T就不需要直接实现Comparable了?我不明白
ShortestPathVertex
如何不实现
Comparable
,而它已经声明要这样做了。