Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用泛型收集实现和接口的类型转换问题_Java_Generics_Interface - Fatal编程技术网

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;