实例检查接口的arraylist

时间:2013-04-24 00:09:21

标签: java

所以我有这个CopyOnWriteArrayList,其中GameObject是一个接口。在整个程序中,我向这个arraylist添加了一堆不同类型的GameObjects。我想知道是否有可能迭代这个arraylist并检查GameObject是否是给定对象的实例(使用方法中的参数。这通常是我的意思:

public <T extends Object> List<T> getObjectsOfType(Class<T> type) {
    ArrayList<T> list = new ArrayList<T>();
    for (Object obj : objects) {
        if (/*match?*/) {
            list.add((T) obj);
        }
    }
    return list;
}

那么在哪里说“匹配?”,我想检查对象是否与Class类型有任何关联。如果GameObject实现“type”,我也希望它能够工作。

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

是的 - 您可以使用Class<T> type的<{3}}方法:

if (type.isAssignableFrom(obj.getClass())) {
    list.add((T) obj);
}

答案 1 :(得分:0)

您可以使用泛型来解决此问题。看来你的方法正在接受一个对象列表,所以我假设你将GameObject放入一个看起来像这样的列表。

List<Object> gameObjects = new ArrayList<Object>();

如果您将列表切换为使用仅接受GameObject的通用列表,则不需要进行类型检查。

List<GameObject> gameObjects = new ArrayList<GameObject>();

答案 2 :(得分:0)

您可以使用Class:

中的isInstance()方法
if (type.isInstance(obj)) {
    list.add(type.cast(obj));
}

我还建议使用类型。cast()方法来投射obj而不是投射(T)。后者将为您提供编译时警告,而使用type.cast()则不会。