ジェネリック メソッドの複数のワイルドカード
質問: ジェネリック メソッド内の異なるワイルドカードは、完全に異なる型を参照できますか?ネストされたワイルドカードはどのように機能しますか
答え:
複数のワイルドカードではなく、ネストされたワイルドカードが混乱の原因です。
-
ネストされたワイルドカード: リスト<リスト>>はリスト
ではありません。 Java ジェネリックは不変であり、List を意味するためです。はリスト<数値>ではありません。同様に、List>は List> ではありません。
-
ジェネリック メソッドのワイルドカード:
- ジェネリック メソッドでは複数の無関係なワイルドカードが許可されます例: List> list1、リスト> list2.
- ただし、list1 のメソッド addAll(list2) は、? によってキャプチャされたジェネリック型であるため許可されます。両方のリストは異なる場合があります。
- ワイルドカードに明示的な上限がある場合 (例: ? extends List>>)、追加の制限が適用されます。
スニペット説明:
-
LOLUnknowns1: おそらく違法なリストが追加されます>リストを List
> に変換します。笑。これはコンパイルされます。リスト内> List> は任意の型を参照できます。任意のタイプのリストを含めることができます。
-
LOLUnknowns1a: 同じ場合? List> の両方に使用されます。型の場合、ネストされたワイルドカードのキャプチャ変換ルールにより単一の ? の使用が禁止されているため、コンパイルは失敗します。両方のリストについて。
-
LOLUnknowns1b: 1 つの引数が明示的に null の場合、null は任意のジェネリック型に適用でき、キャプチャ変換には参加しないため、コンパイルは成功します。
-
DoubleLOL: 2 つの List
> を追加します。キャプチャ変換は再帰的に適用されないため、インスタンスは許可されます。つまり、?各リストで異なる型を参照できます。
-
IntoTheWild: リストの作成
>リスト>の場合キャプチャ変換は再帰的に適用されないため、許可されません。
-
IntoTheWild2: キャプチャ変換は内部リスト型に適用できないため、List
>は List> ではありません。
要約すると、ジェネリック メソッドで複数のワイルドカードを使用すると、不明な型を柔軟に処理できますが、ネストされたワイルドカードにはキャプチャ変換に関連する特定の制限があります。
以上がジェネリック メソッド内の複数のワイルドカードは異なる型を参照できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。