如何使用通用函数

时间:2019-04-26 17:31:51

标签: java generics

考虑这样的层次结构:

class A {}
class B extends A {}
class C extends A {}
class D extends C {}

还有一个存储这些类的对象的列表:

List<A> myObjects = new ArrayList<>();
myObjects.add(new A());
myObjects.add(new B());
myObjects.add(new C());
myObjects.add(new C());
myObjects.add(new D());

现在,我想创建一个通用函数,该函数将允许我查找特定类型的对象(受C#中Unity的GameObject.FindGameObjectsOfType<T>()函数的启发)。

这是我的方法:

static <T extends A> List<T> findObjectsOfType(List<A> list) {
    List<T> newList = new ArrayList<>();
    for (A a : list) {
        if (a instanceof T) {
            newList.add((T)a);
        }
    }
    return newList;
}

但这会产生错误,因为T在运行时中丢失了,所以我无法检查a是否是T的实例。实现这样的功能的正确方法是什么?

所需的通话输出:

findObjectsOfType<C>(myObjects);

将是一个List<C>,其中前面添加了2个元素(没有继承的D类对象)

0 个答案:

没有答案