在構建隨機圖我試圖支持2種不同的邊緣類型實例化一般類型以支持自定義的對象
TimestampEdge
DiffusionEdge
其中每一種延伸的一般邊緣類
public class TimeStampEdge extends Edge<DiffusionVertex,Integer> {
//timestamp edge specific methods
}
public class DiffusionEdge extends Edge<DiffusionVertex,Integer> {
public DiffusionEdge(String name, DiffusionVertex v, DiffusionVertex v1) {
super(name, v, v1);
}
}
V是一個自我引用變量使得頂點可保持其鄰居列表,和K只是一個邊緣的一些值有
public class Edge<V extends Vertex<?,V>,K> implements Edges<V,K> {
//Generic edge methods and values
}
我想要做的是什麼能夠從相同的圖形模型創建兩種邊緣類型的圖形,下面是隨機K樹的示例。其中E應該是TimeStampEdge
或DiffusionEdge
,擴散頂點是所有圖模型使用的頂點,而GraphClass
是所有圖模型繼承的抽象類。
public class KTree<E extends Edge<DiffusionVertex, Integer>> extends GraphClass<DiffusionVertex,E>
//ktree methods
public boolean addEdge(DiffusionVertex v, DiffusionVertex v1){
if(this.findEdgeSet(v,v1).isEmpty()){
v.setDegree(v.getDegree()+1);
v1.setDegree(v1.getDegree()+1);
E edge = (E) new Edge(v.getLabel() +"-"+v1.getLabel() ,v,v1);
this.Edges.put(edge.getHashCode(), edge);
return true;
}else{
return false;
}
}
//more ktree methods
}
我一直運行到哪裏java.lang.ClassCastException
類邊緣不能轉換爲TimeStampEdge
或DiffusionEdge
,我相信這個問題來自於我在所示addEdge
方法始終是邊緣類的邊緣的實例。不過,我不確定如何使它在創建E型邊緣的地方進行。任何有關如何去做這件事的幫助都將非常感謝!