ホームページ >Java >&#&チュートリアル >「super」キーワードは Java ジェネリックの型安全性と使用法にどのような影響を与えますか?

「super」キーワードは Java ジェネリックの型安全性と使用法にどのような影響を与えますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-25 14:24:11164ブラウズ

How Does the `super` Keyword Affect Type Safety and Usage in Java Generics?

Java ジェネリック: 「スーパー」キーワードの詳細

ジェネリックを使用すると、型パラメーターを導入することで、開発者はより柔軟で再利用可能なコードを作成できます。ジェネリックスの 1 つの側面は、型境界で 'super' キーワードを使用することです。

コレクション宣言の Super

'super を含む境界付きワイルドカードを使用してコレクションを宣言する場合'、たとえば:

List<? super Number> list = null;

これは、コレクションがそのタイプがサブタイプである要素を保持できることを指定します。 番号。ただし、これは Number のスーパータイプを保持できるという意味ではありません。この場合、次の動作が観察されます。

  • list.add(new Integer(0)) はコンパイルされ、正しく動作します。 Integer は Number のサブタイプであるため、リストに追加できます。
  • list.add(new Object()) はコンパイルされません。オブジェクトは Number のスーパータイプですが、リストは Number のスーパータイプを保持するように宣言されていません。

'Super' キーワードとタイプ セーフティ

次の点を考慮してください。 code:

static void test(List<? super Number> param) {
  param.add(new Integer(2));
}

public static void main(String[] args) {
  List<String> sList = new ArrayList<String>();
  test(sList);
}

直観的には、String もNumber のスーパータイプ。ただし、タイプ セーフティのため許可されていません。 Java は、実行時エラーを防ぐためにタイプ セーフティを強制します。 Number のサブタイプのみを保持すると宣言されているリストに String を追加すると、タイプ セーフティに違反します。

なぜ '' しないのでしょう。 Constructs?

Java では、「super」キーワードと「extends」キーワードの両方を使用した型境界は許可されません。これは、型制約の競合が発生し、型安全性の確保が困難になるためです。たとえば、「」の場合、が許可されており、List を宣言した場合、'S' が 'T' のサブタイプであるかスーパータイプであるかは不明瞭になります。

ジェネリックにおける 'super' に関する重要な考慮事項

  • 指定された「スーパー」キャプチャ サブタイプを持つ境界付きワイルドカードtype.
  • 型安全性により、スーパー境界コレクションに追加される要素は、指定された型のサブタイプでなければならないことが規定されています。
  • 'super' と 'extends' は、潜在的な型のため、型境界内で組み合わせることができません安全違反。

以上が「super」キーワードは Java ジェネリックの型安全性と使用法にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。