为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

偶然的你 2023-09-06 16:57:02
我有一个通用类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 MinPriorityQueueShortestPath.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。
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

改变这一行

public class MinPriorityQueue<T extends Comparable<T>>

对此:

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

这里的问题是T extends ShortestPathVertex<E>在方法中Dijkstra,所以T不需要Comparable直接实现。但这在您的版本中是必要的MinPriorityQueue。我的改变解决了这个问题。

说明:是实现 的子In MinPriorityQueue<T> Q = ... T类型。这意味着与 type 的值(它是 的超类型)相当。但在您的版本中,您定义它必须与同一类型相当。如果您还想接受超类型,则必须通过 定义它。ShortestPathVertex<E>Comparable<ShortestPathVertex<E>>TShortestPathVertex<E>TMinPriorityQueueTT<? super T>

您可以尝试(仅用于演示):在方法中Dijkstra替换每次出现的Tby ShortestPathVertex<E>。这也适用于更简单的 class 定义MinPriorityQueue

这种方式使用的另一个例子super:查看Collections.binarySearchJava类库中的方法。


查看完整回答
反对 回复 2023-09-06
  • 1 回答
  • 0 关注
  • 246 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信