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

标签 java arrays generics casting

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

最佳答案

你的方法应该是通用的:

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 - 将类类型传递给方法,然后转换为该类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16625576/

相关文章:

java - 当定义为泛型类参数时,如何获取 Enum 的 valueOf 和值并调用其实现的接口(interface)上的方法

java - 由于我的 IntelliJ 设置,Maven 安装失败

java - 当列表中不存在 X 时,从列表中查找大于 X 的值

java - 删除不同类名中存在的属性

c - 如何将文件中的数字扫描到数组中?

delphi - 调用泛型类型的方法?

java - 如何使用属性作为键将对象列表转换为 JSON 对象?

ios - 如何确定具有给定属性的对象是否存在于nsarray/nsmutablearray中

计算数组中的唯一数字并将它们放入二维数组中

java - 具有构建器模式的通用对象