Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现通用顶点和边类_Java_Generics - Fatal编程技术网

Java 实现通用顶点和边类

Java 实现通用顶点和边类,java,generics,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 Has

我想实现通用图类。以下是我的想法:

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();
}
编译器抱怨我在调用构造函数中的可重写方法


有没有更好的实现方法?

当您实现扩展EdgeBase的新类时,您需要将所有E类型替换为Edge,并且Edge必须是Extended EdgeBase,例如:

public class EdgeBaseImpl<V extends VertexBase<V, Edge>> extends EdgeBase<V, Edge> {
  ...
  @Override
  protected Edge get() {
     return this;
  }
}
public类EdgeBase扩展了EdgeBase{
...
@凌驾
受保护的边get(){
归还这个;
}
}

当您实现扩展EdgeBase的新类时,需要将所有E类型替换为Edge,并且Edge必须扩展EdgeBase,例如:

public class EdgeBaseImpl<V extends VertexBase<V, Edge>> extends EdgeBase<V, Edge> {
  ...
  @Override
  protected Edge get() {
     return this;
  }
}
public类EdgeBase扩展了EdgeBase{
...
@凌驾
受保护的边get(){
归还这个;
}
}