0

私は混乱しています - 助けが必要です。私は抽象メソッドを持つ抽象クラスを持っています:

public abstract class AbstractA<T extends SomeOtherClass> {

    public abstract List<String> getAll();

}

AbstractA 型のメソッド パラメータを宣言して getAll() を呼び出すと、IDE に正しい戻り値の型 ( List<String>) が表示されます。

...

public void test(AbstractA abstractA) {
    abstractA.getAll(); // <- returns List<String>
}

...

しかし、そのリストを繰り返し処理したい場合、各要素は String ではなく Object 型です。

...

public void test(AbstractA abstractA) {
    for(String element : abstractA.getAll()) {  // <- compile error: 
     // error: incompatible types: Object cannot be converted to String
    }
}

...

そして、それはさらに良くなります:

...

public void test(AbstractA abstractA) {
    List<String> myElements = abstractA.getAll();
    for(String element : myElements) { // <- this is correct!
    }
}

...

ここで何が起こっているのかわかりません。Java 8 (アップデート 25) を使用しています。コンパイラが私のリストの反復を受け入れなかった理由を誰かに説明してもらえますか?

本当にありがとうございました。

よろしく、 ダニエル

4

0 に答える 0