假设:
interface ViewableDTO {//methods here}
class PersonDTO implements ViewableDTO {//implementation here}
这很好用:
PersonDTO p = new PersonDTO();
ViewableDTO v = p; //works
为什么这不起作用:
List<PersonDTO> plist = getPersonDtoList();
List<ViewableDTO> vlist = plist; //compilation error
List<ViewableDTO> vlist = (List<ViewableDTO>)plist; //compilation error
我的解决方案是:
List<ViewableDTO> vlist = new ArrayList<ViewableDTO>();
vlist.addAll(plist);
我的问题是,这是唯一/最好的方法吗?
答案 0 :(得分:3)
考虑使用List<ViewableDTO>
可以做些什么。您可以添加实现ViewableDTO
的类型的任何对象。你真的想要这个编译吗?
List<PersonDTO> plist = getPersonDtoList();
List<ViewableDTO> vlist = plist;
vlist.add(new OtherDTO());
不 - 在该表单中列出 out 的列表是唯一安全的,所以你使用这样的东西:
List<PersonDTO> plist = getPersonDtoList();
List<? extends ViewableDTO> vlist = plist;
有关详细信息,请参阅Java Generics FAQ section on Wildcard Instantiations。
答案 1 :(得分:0)