首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法,该方法根据调用方式返回泛型类型的数组列表

方法,该方法根据调用方式返回泛型类型的数组列表
EN

Stack Overflow用户
提问于 2013-04-30 23:48:45
回答 2查看 532关注 0票数 0

为了减少代码重复,我替换了下面的代码

代码语言:javascript
复制
    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);
    }   

通过这种方法

代码语言:javascript
复制
  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();

它返回所有顶点,而不管它们的类型!

问题是什么?如何解决?

EN

回答 2

Stack Overflow用户

发布于 2013-05-01 00:01:00

字面上的等价物是传入一个Class<T> (假设T本身不是泛型类型)并使用Class.cast (可能与Class.isInstance一起使用)。然而,使用instanceof表明你做错了什么;反射,更多的是数量级。

票数 1
EN

Stack Overflow用户

发布于 2013-04-30 23:51:30

将这一行:vertex instanceof Vertex<?> (测试顶点是否为顶点)更改为:vertex instanceof T (这一行检查顶点是否为T类型)

还要确保您熟悉Oracle教程和泛型限制:Oracle Generics Tutorial

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16303938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档