Предположим, что у меня есть абстрактный класс Car и есть x конкретных классов (RedCar, BlueCar ...), которые расширяют класс Car. Тогда у меня есть класс Garage, у которого есть автомобили Car [].Java-отслеживание типов объектов
Я хочу написать логический метод для класса Garage, который будет проходить через автомобили и возвращает true, если найден поиск автомобиля (один из конкретного типа (RedCar, BlueCar ..), переданный как параметр), в противном случае возвращает false.
Каков наилучший способ сделать это?
На данный момент, у меня есть что-то вроде этого:
public boolean hasCar(Class<? extends Car> c) {
for (int i = 0; i < this.cars.length; i++) {
if (c.isInstance(this.cars[i])) {
return true;
}
}
return false;
}
, но не было бы лучше, если бы я создать перечисление со всеми возможными типами автомобилей (подклассы Car), добавить свойство к классу автомобилей, который будет содержать константу из перечисления и сравнить ее на основе этого?
Что-то вроде этого:
public enum CarType{
RED_CAR, BLUE_CAR
}
public abstract class Car{
public CarType type;
Car(CarType type){
this.type = type;
}
}
public class RedCar extends Car{
public RedCar(){
super(CarType.RED_CAR);
}
}
public class BlueCar extends Car{
public BlueCar(){
super(CarType.BLUE_CAR);
}
}
public class Garage{
private Car[] cars;
public boolean hasCar(CarType type) {
for (int i = 0; i < this.cars.length; i++) {
if(this.cars[i].type == type){
return true;
}
}
return false;
}
}
Какой является лучшим способом?
оба метода будут работать одинаково, на мой взгляд, –
да, они будут, но я просто хочу знать, какой путь более профессиональен и как эта ручка опытных программистов – user10099
Вы должны хранить их в разных коллекциях, если вы хотите проверить/поиск по типу класса. –