Я заметил, что если я использую обобщения в сигнатуре метода для выполнения чего-то похожего на ко-вариантные типы возврата, он работает так, как я думаю, за исключением того, что генерирует предупреждение:
interface Car {
<T extends Car> T getCar();
}
class MazdaRX8 implements Car {
public MazdaRX8 getCar() { // "Unchecked overriding" warning
return this;
}
}
С кодом, приведенным выше, моя IDE выдает предупреждение: "Переопределение без проверки: тип возврата требует преобразования без проверки. Найдено: 'MazdaRX8', требуется 'T'"
Что означает это предупреждение?
Это не имеет особого смысла для меня, и Google не выдвинул ничего полезного. Почему это не служит заменой без предупреждений для следующего интерфейса (который также не содержит предупреждений, поскольку ко-вариантные типы возврата разрешены Java)?
interface Car {
Car getCar();
}