Spring CrudRepository 同擦除

Spring CrudRepository same erasure

我有自己的自定义存储库,但是当我尝试 override/use CrudRepository 时,它给我“两种方法具有相同的擦除,但都没有覆盖另一个”。请看下面。

public interface MyRepository extends CrudRepository<Person, String> {

    //<S extends T> S save(S entity); //Parent method
    Person save(Person person);//It accepts this 

    //<S extends T> Iterable<S> saveAll(Iterable<S> entities);//Parent method
    Iterable<Person> saveAll(Iterable<Person> persons);//But does not accept this. why can I not use/override this?
    //This Gives error "both methods have same erasure, yet neither overrides the other"
}

Java 泛型通过称为擦除的概念工作,这意味着在引擎盖下所有泛型都会转换为 <Object>。不幸的是,这是 Java 的限制之一,确保它与 Java 5 和泛型之前编写的代码向后兼容。

编译器发现这两个方法具有相同的名称和相同的参数。 只需将其中一种方法的名称从 saveAll 更改为 saveAllPeople 或其他名称即可。