Требуется отфильтровать список по определенному подклассу с помощью обобщений

У меня есть Список , который содержит определенный суперкласс (например, Автомобиль), и я хотел бы написать метод, который возвращает объекты в этом списке, которые являются экземплярами определенного подкласс (например, Car).

Пока что у меня есть это, но он генерирует типичное предупреждение компилятора о "непроверенных" операциях:

public <T extends Vehicle> List<T> getVehiclesOfType(Class<T> type) {
    List<T> result = new ArrayList<T>();

    for (Vehicle vehicle : getVehicles()) {
        if (type.isAssignableFrom(vehicle.getClass())) {
            result.add(type.cast(vehicle)); // Compiler warning here
            // Note, (T)vehicle generates an "Unchecked cast" warning (IDE can see this one)
        }
    }

    return result;
}

Warning: Note: Test.java uses unchecked or unsafe operations.

Я согласен с любым другим методом достижения этого (я ничего не нашел в Коллекции , но это ' Возможно, это может сделать какой-нибудь метод JDK), но в идеале он должен обеспечивать следующий интерфейс:

List<Car> cars = getVehiclesOfType(Car.class);

Я хотел бы знать, почему я получаю предупреждение компилятора об исходном коде.

7
задан Nicole 5 January 2011 в 15:10
поделиться