Trong dự án Spring Data, CrudRepository cung cấp chức năng CRUD tinh vi cho lớp thực thể đang được quản lý.Điều đó có nghĩa là gì <S extends T> lưu (thực thể S); trong kho lưu trữ mùa xuân?
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.
}
Nói chung, tôi biết những gì "S kéo dài T" có nghĩa là, ví dụ rằng S, kiểu trả về của lưu hoạt động, phải subtype của T. Tại sao nó cần thiết để thêm như hạn chế? Tôi nghĩ rằng đó sẽ là một cái gì đó tốt làm như thế này:
T save (T entity);
Như trong
void delete(T entity);
Tôi đã googled để tìm sự giúp đỡ nhiều hơn và tôi đã tìm ra sau câu hỏi về stackoverflow bản thân nhưng nó isn' t thực sự rõ ràng cho tôi:
Spring CrudRepository: why to invent a new generic type S
cảm ơn bạn.
Tôi nghĩ bạn đúng. 'S' là thừa, và thiết kế chữ ký là một sai lầm. – ZhongYu