2016-07-13 3 views
0

私は愚かなバグがあると確信していますが、そのインタフェースのリストを必要とする関数へのインタフェースを実装するオブジェクトのリストを渡すことができません。Passign関数内のパラメータとしてのインタフェースのリスト

これは、関数のシグネチャである:

public void add(ArrayList<PairStringInterface> data){ ... } 

そして、これは私がこの関数を呼び出しています方法です:私が受け取る

ArrayList<Sector> list = new ArrayList<Sector>(); 
add(list); 

そして、これがクラスセクター

public class Sector implements PairStringInterface { ... } 

ですパラメータに適切な機能がないというエラー

Error:(88, 31) error: no suitable method found for add(ArrayList<Sector>) 
method PairStringSpinnerAdapter.add(ArrayList<PairStringInterface>) 
is not applicable (argument mismatch; ArrayList<Sector> cannot be converted to ArrayList<PairStringInterface>) 

リストを繰り返して1つのアイテムだけを受け取るメソッドを追加すると、それは機能します。

public void add(PairStringInterface elem) { ... } 

ArrayList<Sector> list = .... 
for(Sector s : list){ 
    add(s); 
} 
+2

http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicitly-p?rq=1 – GriffeyDog

答えて

1

あなたは、非常にメソッドに引数として渡された任意のArrayList<Sector>を使用することができるはずです上記のようにメソッドのシグネチャを変更する

public <T extends PairStringInterface> void add(ArrayList<T> list) { 
    // Do your things here... 
} 

に従うようにあなたは、ジェネリック型のプレースホルダを使用する必要があります。

+0

訂正ありがとう@AlexSifuentes –

+0

または 'public void add(ArrayList <?extends PairStringInterface> list)' – shmosel

関連する問題