Getter for Generic类型列表(作为参数传递)

时间:2015-11-26 14:28:19

标签: java generics

我有一个camera->setPosition(Vec(P[0],P[1],P[2]); camera->setviewDirection(Vec(v[0],v[1],v[2]); camera->setupVector(Vec(up[0],up[1],up[2]); 包含不同子类的对象。现在我想获得所有特定的子类。所以我试着写一个通用的getter方法。我的方法显然是错误的,因为List会导致编译错误。

T

3 个答案:

答案 0 :(得分:2)

由于删除了通用信息,因此不能将instanceof与类型参数一起使用。相反,您需要一个Class对象。

public <T extends Resource> List<T> getAllInstancesOfType(Class<T> clazz) {
    List<T> resources = new ArrayList<>();
    for (Resource resource : otherResources) {
        if (clazz.isInstance(resource))
            resources.add((T) resource);
    }
    return resources;
}

您可以传递SomeResourceType.class

来使用此功能

答案 1 :(得分:1)

以下是一种方法,您可以将列表和要从列表中获取的类传递给

public <T extends Resource, S extends Resource> List<S> getAllInstancesOfType(List<T> resources, Class<S> clazz) {
        List<S> subResources = new ArrayList<S>();
        for (Resource resource : resources) {
            if (clazz.isAssignableFrom(resource.getClass()))
                subResources.add((S)resource);
        }
        return subResources;
}

以下是如何使用此方法

  System.out.println(getAllInstancesOfType(Arrays.asList(new Resource(), new Course(), new Course()), Course.class));

答案 2 :(得分:0)

这是语法。

public <T extends Resource> List<T> magicalListGetter(Class<T> type) {
   ...
  return list;
}

或者像你的代码一样,应该在输入中给出一个param T的名字。

 public <T extends Resource> List<T> magicalListGetter(T t) {
           ...
        return list;
        }