我创建了一个在图上实现Dijkstra算法的类。
public class Dijkstra<V, E extends DoubleSupplier> {
...
}
当我尝试使用JUnit测试此类时,编译器会生成此错误: 绑定不匹配:Integer类型不能替代Dijkstra类型的有界参数
测试类是:
public class DijkstraTest {
Dijkstra<String, Integer> dijkstra = new Dijkstra<String, Integer>();
...
}
为什么呢?我在网上搜索过但无法找到它。 使用Java 8。
由于
答案 0 :(得分:1)
您的问题是您希望将“Integer”用于“扩展DoubleSupplier”的事情。
但是,Integer肯定没有实现那个接口;因此这个类不能在这里使用。
你可以编写一个带有Integer的小包装器并相应地实现“DoubleSupplier”接口。
答案 1 :(得分:0)
Integer
未实现DoubleSupplier
,这就是为什么您不能将Integer
用作Dijkstra
的第二个类型参数的原因。也许您确实想要添加ToDoubleFunction<E>
,这样您就可以将边缘映射到double
:
public class Dijkstra<V, E> {
private final ToDoubleFunction<E> edgeToWeightFunction;
public Dijkstra(ToDoubleFunction<E> edgeToWeightFunction) {
this.edgeToWeightFunction = edgeToWeightFunction;
}
private double getEdgeWeight(E edge) {
return edgeToWeightFunction.applyAsDouble(edge);
}
...
}
public class DijkstraTest {
Dijkstra<String, Integer> dijkstra = new Dijkstra<String, Integer>(Integer::doubleValue);
...
}