У меня есть универсальный метод с универсальным параметром Map.Я хочу переопределить его и использовать конкретный подтип, но без приведения я не могу вернуть свой подтип
public interface GarrageSimple {
<T extends Car> T getCar(Map<String, T> c);
}
Ниже приведена реализация, которая выдает ошибку: Несовместимые типы.Требуется: T Найдено: Bmw
public class GarrageSimpleImpl implements GarrageSimple {
@Override
public <T extends Car> T getCar(Map<String, T> c) {
return new Bmw();
}
}
На самом деле, Bmw является подклассом Car, что означает тип T. Когда я разыгрываю его как* return (T) new Bmw (); * работает с предупреждением, что Не проверено приведение Bmw к T
Я знаю, что это потому, что я рискую вернуть конкретный подкласс во время методаподпись является общей, но как я могу изменить свой метод, чтобы сделать его конкретным и не нарушать переопределение подписи?Если я могу, то в этом случае все должно работать как положено.
PS: я не хочу делать мой класс универсальным, мне просто нужно изменить сигнатуру метода, чтобы сделать ее конкретной во время реализации.
Спасибо