Java の複数のワイルドカード: コンパイラーの混乱を解き明かす
質問内のコード スニペットは最初はわかりにくいように見えるかもしれませんが、基礎となる原則は非常に単純です
ワイルドカードの役割
ワイルドカード (*) は未知の型を表します。スニペットでは、複数のワイルドカードを使用すると、コンパイラに不確実性が生じます。
static void doNothing(List<?> list1, List<?> list2) { }
ワイルドカードは無関係であるため、異なるタイプのリスト (List
ネストされたワイルドカードとキャプチャ変換
混乱は主に、ネストされたワイルドカードの役割の誤解から生じます。
static void probablyIllegal(List<List<?>> lol, List<?> list) { }
この場合、ネストされたワイルドカード List> List
static void nowDefinitelyIllegal(List<? extends List<?>> lol, List<?> list) { }
ここで、list (List
)、コンパイラは、型の互換性がない可能性があるため、正当にエラーを発生させます。
追加メモ以上がJava の複数のワイルドカードは、汎用メソッドの動作と型の互換性にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。