Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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 方法,该方法根据调用方式返回泛型类型的arraylist_Java_Generics_Arraylist_Foreach - Fatal编程技术网

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)){//…}
这意味着我应该为每种类型创建一个泛型类!这是不寻常的