繁体   English   中英

Java抽象类泛型方法参数

[英]Java abstract class generic method parameter

我遇到了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类(它是抽象的),所以它不能被添加到优先级队列中并且实际上应该是类型的 (节点的子类)表示在 扩展节点 如何引用此子类类型?

提前致谢。

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

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM