「スーパー」キーワードを使用した境界ジェネリックス: 包括的な説明
Java ジェネリックスにより、型安全性とコードの再利用性が可能になります。ジェネリックスの 1 つの側面は型境界であり、型パラメーターを特定のサブタイプ関係に制限できます。ただし、ワイルドカードとは異なり、'super' キーワードを使用して型パラメータを制限することはできません。
Collection インターフェイスでは、toArray メソッドは型パラメータである 'S[]' の引数を受け取ります。なぜメソッドが「」として宣言されないのかという疑問が生じます。
その答えは、「スーパー」境界の動作にあります。 「super」は通常、ワイルドカード (<'? super T'>) とともに使用されますが、これを型パラメータに適用すると (> の代わりに <'')、意図しない結果。 Object はすべての参照型のスーパークラスです。つまり、'Object[]' は '<'S super T>>' に対する有効な引数です。コンパイル時に。これは、'T' のサブクラスでないものであっても、任意の参照型引数が渡される可能性があるため、バインドの目的を無効にします。
したがって、型パラメーターの 'スーパー' 境界は、型パラメーターに対する期待される保護を提供しません。無効な引数。説明すると、仮説的なメソッド「」は次のようになります。 S[] toArray(S[] a)' と '
この制限は、ジェネリックと配列の間の相互作用に起因します。ジェネリックと配列には異なる共分散ルールがあり、観察される動作につながります。
この制限は型パラメーターにのみ適用されることに注意することが重要です。ワイルドカードは、「<」で見られるように、差異を表現するために「super」を使用してバインドすることができます。スーパーT>'
ジェネリックと型境界の詳細については、次のリソースを参照してください。
以上がJava ジェネリックスの型パラメータ境界に「super」キーワードを使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。