为什么 boolean containsAll(Collection < ?> c); 每种类型都允许收集框架的方法吗?.但是 boolean addAll(Collection< ?extends E> c); 允许?扩展 E。所以,我写了一个程序来澄清。这是我的程序
public class ContainAllTest {
// take ServiceDto
ArrayList<ServiceDto> resultList = new ArrayList<ServiceDto>();
void Test() {
ServiceDto serviceDto = new ServiceDto();
serviceDto.setName("test");
resultList.add(serviceDto);
// another arraylist that takes String
ArrayList<String> resultList1 = new ArrayList<String>();
resultList1.add("test");
// no error, goes for run time.Contain all checking is done for two generic type ServiceDto and String:
resultList.containsAll(resultList1);
// error shown at compile time,as addAll take ServiceDto as generic type but the generic type for resultList1 take String:
resultList.addAll(resultList1);
}
所以,我的问题是我什么时候可以利用 resultList.containsAll(resultList1); 当泛型类型不同时。在我的情况下是 String 和 ServiceDto 。用boolean containsAll(Collection< ?extends E> c)替换boolean containsAll(Collection< ? > c)是否有问题