2011-07-27 98 views
1

考慮:收集使用泛型類型轉換問題的實現和接口

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); 

我的問題是,這是唯一/最好的方法嗎?

回答

3

考慮您可以用List<ViewableDTO>做什麼。您可以添加任何實施ViewableDTO類型的對象。你真的想要這個編譯?

List<PersonDTO> plist = getPersonDtoList(); 
List<ViewableDTO> vlist = plist; 
vlist.add(new OtherDTO()); 

沒有 - 這是唯一安全的把事情淘汰之列以這樣的形式,讓你用這樣的:

List<PersonDTO> plist = getPersonDtoList(); 
List<? extends ViewableDTO> vlist = plist; 

有關詳細信息,請參閱Java Generics FAQ section on Wildcard Instantiations