У меня есть Список
, который содержит определенный суперкласс (например, Автомобиль), и я хотел бы написать метод, который возвращает объекты в этом списке, которые являются экземплярами определенного подкласс (например, 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);
Я хотел бы знать, почему я получаю предупреждение компилятора об исходном коде.