我想实现通用图形类。这些是我想出的:
public abstract class VertexBase<V extends VertexBase<V, E>, E extends EdgeBase<V, E>> {
public final HashMap<V, E> inEdges = new HashMap<>();
public final HashMap<V, E> outEdges = new HashMap<>();
}
public abstract class EdgeBase<V extends VertexBase<V, E>, E extends EdgeBase<V, E>> {
public final V fromVertex;
public final V toVertex;
public EdgeBase(V from, V to) {
fromVertex = from;
toVertex = to;
from.outEdges.put(to, get());
to.inEdges.put(from, get());
}
protected abstract E get();
}
现在的问题是我必须到处实现 Edge::get:
@Override
protected Edge get() {
return this;
}
编译器提示我在构造函数中调用可重写的方法。
有没有办法更好地实现这些?
最佳答案
当你实现扩展EdgeBase的新类时,需要将所有E类型替换为Edge,并且Edge必须扩展EdgeBase
public class EdgeBaseImpl<V extends VertexBase<V, Edge>> extends EdgeBase<V, Edge> {
...
@Override
protected Edge get() {
return this;
}
}
关于java - 实现通用顶点和边类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233644/