我已经阅读了很多有关类型擦除和泛型的显式方差/协方差的信息,但我仍然无法完全理解为什么这是不安全的转换:
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通用的情况下实现此工作的最佳方法是什么?