2
public abstract class A<T> {
    public static void test(A i) { for (String s : i.get()) {} }
    public abstract Iterable<String> get();
}

上記のコードで次のようになる理由:

incompatible types
required: String
found:    Object

testしかし、メソッドの引数を に変更するA<Object>と、コンパイルは成功しますか? 変数の未定義のジェネリック パラメータがメソッドの戻り値の型の明示的なジェネリック パラメータをドロップするのはなぜですか?

4

1 に答える 1

7

変数の未定義のジェネリック パラメータがメソッドの戻り値の型の明示的なジェネリック パラメータをドロップするのはなぜですか?

Aタイプです。これは、固定の型引数を持つものであっても、API で削除されたすべてのジェネリックが削除された型です。

詳細については、JLS セクション 4.8およびJava Generics FAQ の Raw Types セクションを参照してください。

この場合、任意 Aの が必要な場合は、ワイルドカードを使用できます。

public static void test(A<?> i)
于 2013-06-17T19:22:47.380 に答える