根据我所读到的,我认为这是不可能的,但我想确定一下。我有一堂课OpDTO
和其他几堂课*DTO extends OpDTO
。然后,我想有一种方法从这些子 DTO 的列表中提取某些元素,并在另一个列表中返回提取的元素:
public List<? extends OpDTO> getLastOp (List<? extends OpDTO> listDTOs) {
List<? extends OpDTO> last = new ArrayList<? extends OpDTO>(); //compile error: Cannot instantiate the type ArrayList<? extends OpDTO>
//processing
return last;
}
我想ult
成为与 中的元素相同类型的元素列表listDTOs
,并且只使用 OpDTO 的方法,但它会产生编译错误:
无法实例化类型
ArrayList<? extends OpDTO>
我也尝试做类似的事情:
public <T> List<T> getLastOp (List<T> listDTOs) {
List<T> last = new ArrayList<T>();
//processing
return last;
}
但是我不能强制 listDTOs 中的元素成为 OpDTO 的子类,也不能实例化 T。知道吗?
编辑
我还想到将类型作为参数传递,然后我可以实例化它。那可以吗,还是某种不好的做法?
private <T extends OpDTO> List<T> getLastOp (List<T> listDTOs, Class<? extends OpDTO> clazz) {
List<T> ult = new ArrayList<T>();
//processing
OpDTO op = clazz.newInstance();
//processing
ult.add((T) op);
op = listDTOs.get(i);
return ult;
}