为了减少代码重复,我替换了这段代码
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);
}
通过这种方法
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<ImageVertex>=hyperGraph.getVerticebyType();
它返回所有顶点,无论它们的类型!
有什么问题以及如何解决?
最佳答案
等效的字面意思是传入Class<T>
(假设T
本身不是通用类型)并使用Class.cast
(可能与Class.isInstance
一起使用)。但是,使用instanceof
表示您做错了事。反射,数量级更是如此。