ホームページ > Java > &#&チュートリアル > Java Generics の「super」キーワードは境界付きワイルドカードでどのように機能しますか?またその制限は何ですか?

Java Generics の「super」キーワードは境界付きワイルドカードでどのように機能しますか?またその制限は何ですか?

Mary-Kate Olsen
リリース: 2024-11-25 06:45:22
オリジナル
968 人が閲覧しました

How Does Java Generics' `super` Keyword Work with Bounded Wildcards, and What Are Its Limitations?

Java ジェネリックのスーパーキーワード: 使用法と制限を理解する

ジェネリックは、データ型のカスタマイズを許可することで Java コレクションの機能を拡張します。型の安全性が犠牲になります。 super キーワードは、これらのジェネリック コレクションで重要な役割を果たします。

境界付きワイルドカードについて

ジェネリック コレクションを宣言する場合、super キーワードは境界付きワイルドカードとともに使用できます。このタイプのワイルドカードを使用すると、コレクションで特定のタイプまたはそのスーパータイプを保持できます。例:

List<? super Number> list = null;
ログイン後にコピー

この宣言は、リストに Number オブジェクトまたはそのスーパークラス (Object など) を含めることができることを意味します。

境界付きワイルドカード コレクションへの要素の追加

境界付きワイルドカード コレクションに要素を追加する場合は、厳密な型安全規則に従っていることに注意することが重要です。上の例では、

  • list.add(new Integer(0)) は Integer が Number を拡張するため有効です。
  • list.add(new Object()) は Object であるため無効です。は Number のサブタイプではありません。

スーパーの限界のテストワイルドカード

予想に反して、次のコードはコンパイルできません:

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); // Compile error
}
ログイン後にコピー

String は Object のサブタイプであり、Object は Number のスーパータイプですが、このコードは依然として失敗します。コンパイルします。その理由は、ワイルドカードが特定のタイプ Number (List で定義されている) とそのスーパータイプをキャプチャし、String を除外するためです。スーパーT>しかし、

ではありません。Java が下限ワイルドカード (例: ) を許可しない理由は、Java の型システムによるものです。下限ワイルドカードを使用すると、特定の型のスーパータイプを含む可能性のあるコレクションの作成が可能になり、安全でないキャストや型違反が発生する可能性があります。

要約すると、Java ジェネリックの super キーワードを使用すると、ジェネリックの作成が可能になります。特定のタイプまたはそのスーパータイプのオブジェクトを保持できるコレクション。 Java コードの有効性と正確性を確保するには、境界付きワイルドカードに関連するタイプ セーフティの制限を理解することが重要です。

以上がJava Generics の「super」キーワードは境界付きワイルドカードでどのように機能しますか?またその制限は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート