无法解决“类型参数不在类型变量范围内”错误

我有一个通用类ShortestPathVertex,它实现Comparable:


public class ShortestPathVertex<E extends Number> implements VertexInterface, Comparable<ShortestPathVertex<E>>

另一个MinPriorityQueue需要Comparable类型参数的泛型类:


public class MinPriorityQueue<T extends Comparable<T>>

我需要创建一个MinPriorityQueue实例作为ShortestPathVertex类型参数:


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

}

当我编译时它抛出错误:


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

考虑到该ShortestPathVertex工具,Comparable我不明白它在抱怨什么。为什么说这ShortestPathVertex不在范围内Comparable,我该如何解决它。我正在使用Java 7.0。


偶然的你
浏览 249回答 1
1回答

慕的地10843

改变这一行public&nbsp;class&nbsp;MinPriorityQueue<T&nbsp;extends&nbsp;Comparable<T>>对此:public&nbsp;class&nbsp;MinPriorityQueue<T&nbsp;extends&nbsp;Comparable<?&nbsp;super&nbsp;T>>这里的问题是T extends ShortestPathVertex<E>在方法中Dijkstra,所以T不需要Comparable直接实现。但这在您的版本中是必要的MinPriorityQueue。我的改变解决了这个问题。说明:是实现 的子In MinPriorityQueue<T> Q = ...&nbsp;T类型。这意味着与 type 的值(它是 的超类型)相当。但在您的版本中,您定义它必须与同一类型相当。如果您还想接受超类型,则必须通过 定义它。ShortestPathVertex<E>Comparable<ShortestPathVertex<E>>TShortestPathVertex<E>TMinPriorityQueueTT<? super T>您可以尝试(仅用于演示):在方法中Dijkstra替换每次出现的Tby&nbsp;ShortestPathVertex<E>。这也适用于更简单的 class 定义MinPriorityQueue。这种方式使用的另一个例子super:查看Collections.binarySearchJava类库中的方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java