Расширенная параметризация классов Java
Задача сделать так чтобы класс Conteiner() был параметризован только типом Car() и Bike() и их потомками, знаю что можно создать их общий супер класс или интерфейс, но лучший ли это способ или есть варианты по лучше
public static void main(String[] args) {
Container<Car.Sedan> sdns;
Container<Bike.Scooter> scts;
}
}
class Container<T extends Car | Bike> {}
class Car {
class Sedan extends Car {}
class Pickup extends Car {}
class Truck extends Car {}
}
class Bike {
class Bicycle extends Bike {}
class Scooter extends Bike {}
class Motorcycle extends Bike {}
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Желаемый вариант записи <T extends Car | Bike> с использованием оператора ИЛИ | является синтаксической ошибкой, в Java можно применять дополнительные ограничения на обобщённый класс при помощи И &, поэтому в данном случае возможны такие варианты:
- создать некий общий класс для
CarиBike:
class Common extends Transport {}
class Container<T extends Common> {}
class Car extends Common {}
class Bike extends Common {}
- создать маркерный интерфейс для объектов в контейнере, тогда классы
CarиBikeнеобязательно должны порождаться от классаTransport
interface Containable {}
class Container<T extends Containable> {}
class Car implements Containable {}
class Bike implements Containable {}
- создать спецконтейнер для потомков
Transport, реализующих интерфейсContainable:
interface Containable {}
class Container<T extends Transport & Containable> {}
class Car extends Transport implements Containable {}
class Bike extends Transport implements Containable {}