¿Qué significa <S extiende T> guardar (entidad S); en Spring Repository?
En el proyecto Spring Data, CrudRepository proporciona una funcionalidad CRUD sofisticada para la clase de entidad que se está administrando.
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.
}
En general, sé lo que significa "S extiende T", es decir, que S, el tipo de retorno de la operación de salvar, debe ser un subtipo de T. ¿Por qué es necesario agregar como restricción? Creo que estaría bien hacer algo como esto:
T save (T entity);
Como en
void delete(T entity);
Busqué en Google para encontrar más ayuda y descubrí la siguiente pregunta sobre stackoverflow en sí, pero no está realmente claro para mí:
Spring CrudRepository: por qué inventar un nuevo tipo genérico S
gracias.