5

I think I made some mistake while writing my code. I have a class MyClass that implements Interface, now I've a method that is generic for List of Interface as a parameter. I want to use my method by passing a List. I can't cast from List to List (that I assumed I could). So, what can I do to make my code work? here an example:

List<MyClass> lista = returnMyClassList();
myMethod((List<Interface>) lista); //this doesn't work

//myMethod signature
public void myMethod(List<Interface> struttura);

Thanks for helping.

4

5 に答える 5

9

Interfacetype:の上限を使用します<? extends Interface>

以下は、JDK のクラスを使用して説明するコンパイル可能なコードです。

public static void myMethod(List<? extends Comparable> struttura) {}

public static void main(String[] args) {
    List<Integer> lista = null;
    myMethod(lista); // compiles OK
}
于 2013-09-17T13:47:38.197 に答える
2

List<MyClass>List<Interface>エラーが発生しているサブタイプではありません。
Java docsに準拠

2 つの具象型 A と B (Number と Integer など) が与えられた場合、A と B が関連しているかどうかに関係なく、MyClass は MyClass と何の関係もありません。MyClass と MyClass の共通の親は Object です

したがって、メソッドの署名を次のように変更します

   public void myMethod(List<? extends Interface> struttura){
   }

メソッドを呼び出します

   List<MyClass> lista = returnMyClassList();      
   myMethod((lista);
于 2013-09-17T13:41:08.460 に答える
2

を使用する必要がありますpublic void myMethod(List<? extends Interface> struttura);。このようにして、任意の型を渡すことができますIS-A Interfaceポリモープシズムとジェネリックについて読みたい

于 2013-09-17T13:41:33.690 に答える