【问题标题】:Spring CrudRepository same erasureSpring CrudRepository 相同的擦除
【发布时间】:2020-07-21 17:04:16
【问题描述】:

我有自己的自定义存储库,但是当我尝试覆盖/使用 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 spring spring-boot spring-data-jpa spring-repositories


    【解决方案1】:

    Java 泛型通过称为擦除的概念工作,这意味着在后台所有泛型都被转换为&lt;Object&gt;。不幸的是,这是 Java 的限制之一,确保它与 Java 5 和泛型之前编写的代码向后兼容。

    Compiler 会看到具有相同名称和相同参数的两个方法。 只需将其中一种方法的名称从 saveAll 更改为 saveAllPeople 或其他任何名称,它就会起作用。

    【讨论】:

    • 那这怎么行 Person save(Person person);它具有相同的名称和参数。还有
    • Person 不是泛型。泛型被 包围 对于编译器,这些方法是相同的 1. Iterable saveAll(Iterable persons); 2. Iterable saveAll(Iterable 人); 3. Iterable saveAll(Iterable 人);
    • Person 不是通用的? S save(S entity);这是基本方法。所以问题 Person save(Person person);作品。但。 Iterable saveAll(Iterable 实体);这不起作用 Iterable saveAll(Iterable 个人);/
    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2011-10-24
    • 2014-06-24
    • 2017-07-04
    • 2014-06-13
    • 2017-04-25
    相关资源
    最近更新 更多