2011-07-27 5 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

を見てみてください動作します。 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を参照してください。

関連する問題