У меня есть абстрактный класс Vehicle с 2 реализованными подклассами RedVehicle и YellowVehicle.
В другом классе у меня есть List<Vehicle> содержащий экземпляры обоих подклассов.
Я хочу, чтобы иметь возможность передать в метод тип класса, а затем использовать этот тип, чтобы решить, какой набор объектов я хочу сделать в List.
Так как Class является общим, я должен каким-то образом параметризовать его, однако, поместив параметр в качестве родительского класса Vehicle, он перестает работать с вызывающим кодом, так как exampleMethod теперь ожидает тип транспортного средства, а не подкласс RedVehicle или YellowVehicle.
Я считаю, что должен быть чистый способ сделать это, чтобы быть правильным способом реализовать функциональность?
n.b. Мне не обязательно проходить в типе Class, если есть лучшие предложения, я был бы счастлив попробовать их.
Код вызова:
service.exampleMethod(RedVehicle.class);
service.exampleMethod(YellowVehicle.class);
Поля/Метод:
//List of vehicles
//Vehicle has 2 subclasses, RedVehicle and YellowVehicle
private List<Vehicle> vehicles;
//Having <Vehicle> as the Class parameter stops the calling code working
public void exampleMethod(Class<Vehicle> type)
{
for(Vehicle v : vehicles)
{
if(v.getClass().equals(type))
{
//do something
}
}
}