ホームページ Java &#&チュートリアル Java 関数の汎用ワイルドカード: 上限と下限

Java 関数の汎用ワイルドカード: 上限と下限

Apr 25, 2024 pm 04:18 PM
ワイルドカード ジェネリック

Java では、汎用ワイルドカードを使用して、特定の型を指定せずに汎用型を表すことができます。上限のワイルドカード文字 ( extends T>) は型パラメータ T またはそのサブクラスを表し、サブクラス データをリスト内で受け入れることができます。下部のワイルドカード文字 ( super T>) は T またはそのスーパークラスを表し、リスト内のスーパークラス データを受け入れることができます。ワイルドカードを使用すると、ジェネリックスを使用してサイズ変更可能な配列リストを実装でき、さまざまな型や追加/削除操作を処理できるようになります。

Java 函数中的泛型通配符:上限和下限

Java 関数のジェネリック ワイルドカード: 上限と下限

Java では、ワイルドカードを使用してジェネリック型を表すことができ、具体的な型を指定せずにジェネリックを使用できるようになります。この記事では、上位および下位のワイルドカードについて説明し、実際の例を通じてその使用法を示します。

キャップ付きワイルドカード

キャップ付きワイルドカード (<? extends T>) は、型パラメーター T またはそのサブクラスのいずれかを表します。例: <? extends T>) 表示类型参数 T 或其任何子类。例如:

public static <T extends Number> double sum(List<T> numbers) {
  double total = 0;
  for (T num : numbers) {
    total += num.doubleValue();
  }
  return total;
}
ログイン後にコピー

此函数可以接受任何 Number (如 Integer、Double) 或其子类的列表。我们可以安全地将任何满足 Number 约束的列表传递给此函数,如下所示:

List<Integer> ints = List.of(1, 2, 3);
double sumIntegers = sum(ints); // 编译通过
ログイン後にコピー

下限通配符

下限通配符 (<? super T>) 表示类型参数 T 或其任何超类。例如:

public static <T super Number> void process(List<T> entities) {
  for (T entity : entities) {
    System.out.println(entity.getClass().getName());
  }
}
ログイン後にコピー

此函数可以接受任何 Number 的超类 (如 Object、Serializable) 的列表。我们可以安全地将任何满足 Number 超类约束的列表传递给此函数,如下所示:

List<Object> objects = List.of("Hello", 123);
process(objects); // 编译通过
ログイン後にコピー

实战案例

考虑一个可调整大小的数组列表,我们可以使用泛型通配符来实现它:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ResizableArrayList<E> {

  private List<E> list;

  public ResizableArrayList() {
    this(new ArrayList<>());
  }

  public ResizableArrayList(List<? super E> initialList) {
    list = new ArrayList<>(initialList);
  }

  public void addAll(List<? extends E> elements) {
    list.addAll(elements);
  }

  public void removeAll(List<? super E> elements) {
    list.removeAll(elements);
  }

  public List<E> getList() {
    return list;
  }

  public static void main(String[] args) {
    ResizableArrayList<Integer> numbers = new ResizableArrayList<>(
        Arrays.asList(1, 2, 3)
    );
    numbers.addAll(Arrays.asList(4, 5, 6));
    numbers.removeAll(Arrays.asList(2, 3));

    System.out.println(numbers.getList()); // [1, 4, 5, 6]
  }
}
ログイン後にコピー

这个可调整大小的数组列表可以处理任何类型 Errreee

この関数は、任意の数値 (Integer、Double など) またはそのサブクラスのリストを受け入れることができます。次のように、Number 制約を満たす任意のリストをこの関数に安全に渡すことができます: 🎜rrreee🎜🎜下位ワイルドカード🎜🎜🎜下位ワイルドカード (<? super T>) は型パラメータ を表します。 T またはそのスーパークラスのいずれか。例: 🎜rrreee🎜 この関数は、任意の Number スーパークラス (Object、Serializable など) のリストを受け入れることができます。次のように、Number スーパークラスの制約を満たす任意のリストをこの関数に安全に渡すことができます: 🎜rrreee🎜🎜 実用的な例 🎜🎜🎜 サイズ変更可能な配列リストを考えてみましょう。それを実現するには、汎用のワイルドカードを使用できます: 🎜rrreee🎜このサイズ変更可能な配列リストは、任意の typeE を処理し、さまざまなオブジェクトをリストに追加または削除できるようにします。 🎜

以上がJava 関数の汎用ワイルドカード: 上限と下限の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ジェネリック関数は Golang の可変長引数の型の問題を解決しますか? ジェネリック関数は Golang の可変長引数の型の問題を解決しますか? Apr 16, 2024 pm 06:12 PM

Go のジェネリック関数は、可変個引数型の問題を解決します。ジェネリック関数を使用すると、実行時に型パラメータを指定できます。これにより、さまざまな型のパラメータを処理できる関数を作成できるようになります。たとえば、Max 関数は、2 つの同等のパラメーターを受け取り、大きい方の値を返す汎用関数です。ジェネリック関数を使用すると、さまざまな種類のパラメーターを処理できる、より柔軟で汎用的なコードを作成できます。

golang でのジェネリックスの具体的なアプリケーション シナリオ golang でのジェネリックスの具体的なアプリケーション シナリオ May 04, 2024 am 11:45 AM

Go でのジェネリックスのアプリケーション シナリオ: コレクション操作: フィルター処理など、あらゆるタイプに適したコレクション操作を作成します。データ構造: キュー、スタック、マップなどの汎用データ構造を作成して、さまざまな種類のデータを保存および操作します。アルゴリズム: さまざまな種類のデータを処理できる、並べ替え、検索、リダクションなどの汎用アルゴリズムを作成します。

Java関数ジェネリックの上限と下限は何ですか?使い方? Java関数ジェネリックの上限と下限は何ですか?使い方? Apr 26, 2024 am 11:45 AM

Java 関数ジェネリックでは、上限と下限を設定できます。 Extends は、関数によって受け入れられるか返されるデータ型が、指定された型のサブタイプである必要があることを指定します。下限 (スーパー) は、関数によって受け入れられるか返されるデータ型が、指定された型のスーパータイプである必要があることを指定します。ジェネリックを使用すると、コードの再利用性とセキュリティが向上します。

Golang でのジェネリックの利点と使用法を調べる Golang でのジェネリックの利点と使用法を調べる Apr 03, 2024 pm 02:03 PM

回答: Golang ジェネリックは、コードの再利用性、柔軟性、型安全性、およびスケーラビリティを向上させるための強力なツールです。詳細な説明: 利点: コードの再利用性: 共通のアルゴリズムとデータ構造 柔軟性: 特定の型のインスタンスのランタイム作成 型安全性: コンパイル時の型チェック 拡張性: 拡張およびカスタマイズが容易 目的: 共通の関数: 並べ替え、比較 リストなどの共通のデータ構造、マップ、スタックなど。型エイリアス: 型宣言を簡素化します。制約されたジェネリックス: 型安全性を確保します。

Android開発におけるJavaジェネリックの適用 Android開発におけるJavaジェネリックの適用 Apr 12, 2024 pm 01:54 PM

Android 開発におけるジェネリックの適用により、コードの再利用性、セキュリティ、柔軟性が強化されます。この構文は、型パラメーター化されたデータの操作に使用できる型変数 T の宣言で構成されます。動作中のジェネリックにはカスタム データ アダプターが含まれており、アダプターがあらゆる種類のカスタム データ オブジェクトに適応できるようになります。 Android は、さまざまな型のパラメーターを操作できる汎用リスト クラス (ArrayList など) と汎用メソッドも提供します。ジェネリックスを使用する利点には、コードの再利用性、セキュリティ、柔軟性が含まれますが、コードの可読性を確保するために正しい境界を指定し、適度に境界を使用するように注意する必要があります。

Golang の汎用関数の制限は何ですか? Golang の汎用関数の制限は何ですか? Apr 16, 2024 pm 05:12 PM

Go 汎用関数の制限: 型パラメーターのみがサポートされ、値パラメーターはサポートされません。関数の再帰はサポートされていません。型パラメータは明示的に指定できず、コンパイラによって推論されます。

Golang ジェネリックは関数のシグネチャとパラメーターにどのような影響を与えますか? Golang ジェネリックは関数のシグネチャとパラメーターにどのような影響を与えますか? Apr 17, 2024 am 08:39 AM

Go 関数のシグネチャとパラメーターに対するジェネリックスの影響には、以下が含まれます。 型パラメーター: 関数シグネチャーには、関数が使用できる型を指定する型パラメーターを含めることができます。型制約: 型パラメーターには、満たさなければならない条件を指定する制約を設定できます。パラメーターの型の推論: コンパイラーは、指定されていない型パラメーターの型を推論できます。型の指定: パラメーターの型を明示的に指定して、ジェネリック関数を呼び出すことができます。これにより、コードの再利用性と柔軟性が向上し、複数の型で使用できる関数や型を作成できるようになります。

Java 列挙型はジェネリックとどのように連携するのでしょうか? Java 列挙型はジェネリックとどのように連携するのでしょうか? May 04, 2024 am 08:36 AM

Java における列挙型とジェネリックの組み合わせ: ジェネリックを使用して列挙を宣言する場合は、山かっこを追加する必要があります。T は型パラメータです。ジェネリック クラスを作成するときは、山括弧を追加する必要もあります。T は、任意の型を格納できる型パラメーターです。この組み合わせにより、コードの柔軟性、型安全性が向上し、コードが簡素化されます。

See all articles