我有一个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
答案 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;
}