为了减少代码重复返回通用类型的ArrayList我通过该方法方法是,根据它是如何被调用
public <T extends Vertex<?> > ArrayList<T> getVerticebyType() {
ArrayList<T> array = new ArrayList<T>();
for (Vertex<?> vertex : this.getAllVertice()) {
if (vertex instanceof Vertex<?>)
array.add((T) vertex);
}
return array;
}
替换此代码
ArrayList<Vertex> allVertice = new ArrayList<>(hypergraph.getVertices());
System.out.println(allVertice.size());
//hypergraph.getVerticebyType();
ArrayList<ImageVertex> allImVetice = new ArrayList<>();
ArrayList<TagVertex> allTagVetice = new ArrayList<>();
ArrayList<LocationVertex> allLocVetice = new ArrayList<>();
for (Vertex vertex : allVertice) {
if (vertex instanceof ImageVertex)
allImVetice.add((ImageVertex)vertex);
else if (vertex instanceof TagVertex)
allTagVetice.add((TagVertex)vertex);
else if (vertex instanceof LocationVertex)
allLocVetice.add((LocationVertex)vertex);
}
但是当我测试这个指令
ArrayList<ImageVertex>=hyperGraph.getVerticebyType();
它返回所有顶点不管它们的类型!
有什么问题,以及如何解决它?
这只是一种猜测,因为我不熟悉Java泛型,但是我希望的'如果(顶点的instanceof T)'味道 – 2013-04-30 15:52:13