Java 使用泛型收集实现和接口的类型转换问题
鉴于: 这很好:Java 使用泛型收集实现和接口的类型转换问题,java,generics,interface,Java,Generics,Interface,鉴于: 这很好: interface ViewableDTO {//methods here} class PersonDTO implements ViewableDTO {//implementation here} 为什么这不起作用: PersonDTO p = new PersonDTO(); ViewableDTO v = p; //works List plist=getPersonDtoList(); 列表vlist=plist//编译错误 列表vlist=(列表)plist
interface ViewableDTO {//methods here}
class PersonDTO implements ViewableDTO {//implementation here}
为什么这不起作用:
PersonDTO p = new PersonDTO();
ViewableDTO v = p; //works
List plist=getPersonDtoList();
列表vlist=plist//编译错误
列表vlist=(列表)plist//编译错误
我的解决方案是:
List<PersonDTO> plist = getPersonDtoList();
List<ViewableDTO> vlist = plist; //compilation error
List<ViewableDTO> vlist = (List<ViewableDTO>)plist; //compilation error
List vlist=new ArrayList();
vlist.addAll(plist);
我的问题是,这是唯一/最好的方法吗?这会奏效的
List<ViewableDTO> vlist = new ArrayList<ViewableDTO>();
vlist.addAll(plist);
List考虑一下如何使用列表
。您可以将实现可视数据的类型的任何对象添加到
。你真的想编译这个吗
List<? extends ViewableDTO> vlist = plist;
List plist=getPersonDtoList();
列表vlist=plist;
添加(新的OtherDTO());
?
不-只有以这种形式从列表中取出内容才安全,因此您可以使用以下内容:
List<PersonDTO> plist = getPersonDtoList();
List<ViewableDTO> vlist = plist;
vlist.add(new OtherDTO());
List plist=getPersonDtoList();
列表
List<PersonDTO> plist = getPersonDtoList();
List<? extends ViewableDTO> vlist = plist;