если это было изначально

екте Spring Data CrudRepository предоставляет сложные функции CRUD для управляемого класса сущностей.

public interface CrudRepository<T, ID extends Serializable>
extends Repository<T, ID> {

    <S extends T> S save(S entity);

    T findOne(ID primaryKey);

    Iterable<T> findAll();

    Long count();

    void delete(T entity);

    boolean exists(ID primaryKey);

    // … more functionality omitted.
}

В общем, я знаю, что означает «S расширяет T», т. Е. Что S, возвращаемый тип операции сохранения, должен быть подтипом T. Почему необходимо добавлять такие как ограничение? Я думаю, что было бы хорошо сделать что-то вроде этого:

T save (T entity);

Как в

void delete(T entity);

Я погуглил, чтобы найти больше помощи, и я выяснил следующий вопрос о самом стеке, но он мне не совсем понятен:

Spring CrudRepository: зачем изобретать новый универсальный тип S

благодарю вас.