Java 方法,该方法根据调用方式返回泛型类型的arraylist
为了减少代码重复,我将替换此代码Java 方法,该方法根据调用方式返回泛型类型的arraylist,java,generics,arraylist,foreach,Java,Generics,Arraylist,Foreach,为了减少代码重复,我将替换此代码 ArrayList<Vertex> allVertice = new ArrayList<>(hypergraph.getVertices()); System.out.println(allVertice.size()); //hypergraph.getVerticebyType(); ArrayList<ImageVertex> allImVetice = new ArrayList&l
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 allVertice=新的ArrayList(hypergraph.getVertices());
System.out.println(allVertice.size());
//hypergraph.getVerticebyType();
ArrayList allImVetice=新的ArrayList();
ArrayList allTagVetice=新的ArrayList();
ArrayList allLocVetice=新的ArrayList();
用于(顶点:allVertice){
if(图像顶点的顶点实例)
添加((图像顶点)顶点);
else if(标记顶点的顶点实例)
添加((标记顶点)顶点);
else if(LocationVertex的顶点实例)
添加((LocationVertex)顶点);
}
用这种方法
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;
}
public更改此行:
顶点的顶点实例(测试顶点是否为顶点)到此:
T的顶点实例
(此实例检查顶点是否为T类型)
还要确保您熟悉Oracle教程和泛型限制:字面上的等价物是将类
传入(假设T
本身不是泛型类型)并使用Class.cast
(可能与Class.isInstance一起)。但是,使用instanceof
表示您做错了什么;反射,数量级更大。这只是一个猜测,因为我不熟悉java泛型,但我希望有一些if(顶点实例of T)
我在收到此错误之前尝试了它无法对类型参数T执行instanceof check。请改用它的擦除顶点,因为更多的泛型类型信息将在运行时被擦除
,然后尝试以下操作(从:):类类型;如果(type.isInstance(obj)){//…}
这意味着我应该为每种类型创建一个泛型类!这是不寻常的