java - 实现通用顶点和边类

标签 java generics

我想实现通用图形类。这些是我想出的:

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/

相关文章:

c# - 多类型变量 C#

java - 排序器从原始序列中获取值

java - Java Netbeans 变量继承问题

java.net.UnknownHostException : Unable to resolve host "api. themoviedb.org

c# - 通用存储库问题

c# - 具有泛型返回类型的可空引用类型

java - 来自具有自己依赖项的子 pom 的 Jar

java - 变量是否应该在 2 个正在运行的线程之间是 volatile 的?

Java 泛型 : syntax clarification needed

c# - List<T> orderby 的动态链接