У меня есть абстрактный класс 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
}
}
}