从arraylist中提取子类的所有实例

Cod*_*ino 5 java generics arraylist

我有ArrayList<Unit> units.我想编写一个函数,它将返回指定子类的所有对象,用作参数.但是我无法让它发挥作用.这是我有的:

public static ArrayList<? extends Unit> getTheseUnits(Class<? extends Unit> specific_unit) {
    ArrayList<specific_unit> res = new ArrayList<>();  //'specific_unit' is in red here. Adding '.class' or '.getClass()' after it does not resolve anything
    for (Unit u : units){
        if (u instanceof specific_unit){
            res.add(u);
        }
    }
    return res;
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*you 4

按类别过滤它们:

public static List<Unit> getUnitsByClass(Class<? extends Unit> specificClass, List<? extends Unit> units) {
     return units.stream()
                 .filter(e -> e.getClass().equals(specificClass))
                 .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

如果您想使该方法参数化,请使用另一个选项:

public static <T extends Unit> List<T> getUnitsByClass(Class<T> specificClass, List<? extends Unit> units) {
     return (List<T>) units.stream()
                           .filter(e -> e.getClass().equals(specificClass))
                           .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

但在第二种方法中,您将收到未经检查的强制转换警告。