将类类型传递给方法,然后将其转换为该类型?

10

我对Java还很陌生,可能会错过一些显而易见的东西。

我有以下代码,用于从我的所有实体列表中选择类类型:

public Array<?> PickEntities(Class<?> cls) {
    Array<? super SpriteEntity> allEntities = new Array<Object>();
    for (SpriteEntity entity : MyGame.AllEntities) {
        if (entity.getClass() == cls) {
                allEntities.add(entity);
        }
    }
    return allEntities;
}

这很好用,但这意味着当调用该方法时,我仍然需要将其强制转换为另一侧的类。例如:

asteroid = (Asteroid)PickEntities(Asteroid.class);
我想做的是使用我传递给 PickEntities 类的类(cls 参数),然后将返回的数组(allEntities)强制转换为 那个 类型。有没有办法做到这一点?每当我尝试时,它只告诉我 'cls' 不是一种类型,不能用于转换。

数组类定义在哪里? - Antimony
1个回答

15
您的方法应该是通用的:
public <T extends SpriteEntity> List<T> pickEntities(Class<T> clazz) {
    List<T> result = new ArrayList<T>();
    for (SpriteEntity entity : MyGame.allEntities) {
        if (entity.getClass() == clazz) {
            result.add((T) entity);
        }
    }
    return result;
}

请注意,我使用了标准的集合类和标准的Java命名约定。

哇,这是一段很棒的代码!完美运行,并且我还学到了如何更好地使用Java :D 谢谢伙计! - boolean
1
请注意,与 OP 中的代码一样,上面的代码仅包括类完全相同的实例,而不包括子类。此外,您可以通过调用 clazz.cast(entity) 来避免强制转换。 - NamshubWriter
1
如果您想要包含子类,可以使用以下代码: if (clazz.isInstance(entity)) result.add(clazz.cast(entity)); - Vijayendra Vasu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接