Java泛型-为什么此类型不安全

时间:2020-03-11 11:15:47

标签: java generics

我已经阅读了很多有关类型擦除和泛型的显式方差/协方差的信息,但我仍然无法完全理解为什么这是不安全的转换:

public interface TestRepository<T extends ParentEntity> extends JpaRepository<T, String> {
   List<T> testMethod();
}

public class TestClass() {

  private TestRepository testRepository;

  public void test() {
     List<? extends ParentEntity> entities = testRepository.testMethod(); //not safe
     testRepository.saveAll(entities); //safe

  } 
}

现在,我可以通过在TestRepository字段上使用通配符来使其安全,但是随后我遇到了Jpa的saveAll方法的问题:


public class TestClass() {

  private TestRepository<? extends ParentEntity> testRepository;

  public void test() {
     List<? extends ParentEntity> entities = testRepository.testMethod(); //safe
     testRepository.saveAll(entities); //not safe

  } 
}

在不使TestClass通用的情况下实现此工作的最佳方法是什么?

0 个答案:

没有答案