9

我对 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”不是一种类型,不能用于强制转换。

4

1 回答 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 命名约定。

于 2013-05-18T15:00:25.273 回答