O que significa <S extends T> save (entidade S); no Repositório da Primavera?

No projeto Spring Data, o CrudRepository fornece sofisticada funcionalidade CRUD para a classe de entidade que está sendo gerenciada.

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.
}

Em geral, eu sei o que "S estende T" significa, ou seja, que S, o tipo de retorno da operação de salvamento, deve ser o subtipo de T. Por que é necessário adicionar essa restrição? Eu acho que seria bom fazer algo assim:

T save (T entity);

Como em

void delete(T entity);

Pesquisei no Google para obter mais ajuda e descobri a seguinte pergunta no stackoverflow em si, mas isso não está claro para mim:

Spring CrudRepository: por que inventar um novo tipo S genérico

obrigado.

questionAnswers(1)

yourAnswerToTheQuestion