Java抽象类泛型方法参数

时间:2016-05-06 11:53:40

标签: java inheritance abstract

我遇到了java抽象类和泛型函数的问题。该实现是Dijkstra算法图中的节点类。

public abstract class Node {

    float distance;
    Node parent;

    public void relax(Node parent, Edge edge, PriorityQueue<? extends Node> priorityQueue) {
        if (this.distance > parent.distance + edge.weight){
            this.distance = parent.distance + edge.weight;
            this.parent = parent;
            priorityQueue.remove(this);
            priorityQueue.add(this);
        }
    }
}

问题在于:

  

priorityQueue.add(本);

因为这个引用了Node类(它是抽象的),所以它不能被添加到优先级队列中,实际上应该是类型(节点的子类)用表示?扩展节点。如何引用此子类类型?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我不确定你想要达到的目标。我看到两个变种。您将使用节点的一种类型的子类,然后您可以编写如下内容:

public <T extends Node> void relax(T parent, Edge edge, PriorityQueue<T> priorityQueue) {
    if (this.distance > parent.distance + edge.weight){
        this.distance = parent.distance + edge.weight;
        this.parent = parent;
        priorityQueue.remove(this);
        priorityQueue.add((T) this);
    }
}

或者你想只使用不同类型的节点并混合和匹配它们,但队列的类型只是PriorityQueue<Node>