![](/img/trans.png)
[英]Extending abstract method with generic parameter (that must extend generic class) in 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.