使用DoubleSupplier

时间:2015-05-29 13:54:54

标签: java graph

我创建了一个在图上实现Dijkstra算法的类。

public class Dijkstra<V, E extends DoubleSupplier> {
    ...
}

当我尝试使用JUnit测试此类时,编译器会生成此错误: 绑定不匹配:Integer类型不能替代Dijkstra类型的有界参数

测试类是:

public class DijkstraTest {

    Dijkstra<String, Integer> dijkstra = new Dijkstra<String, Integer>();
    ...
}

为什么呢?我在网上搜索过但无法找到它。 使用Java 8。

由于

2 个答案:

答案 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);
    ...
}