可変個引数関数は、不特定の数のパラメーターを受け入れる関数です。
Java 内でこれらの関数が使用される理由を見てみましょう。 2 つの整数を受け取り、両方の合計を返す合計メソッドがあるとします。
public static int summation(int a, int b) { return a + b; }
3 つの数値を加算したい場合は、3 つのパラメーターを受け入れるように summation メソッドをオーバーロードする必要があります。
public static int summation(int a, int b, int c) { return a + b + c; }
4 つの数字を追加したい場合はどうなりますか?ここでも、合計メソッドをオーバーロードする必要があります。
public static int summation(int a, int b, int c, int d) { return a + b + c + d; }
ご覧のとおり、これはスケーラブルではありません。異なる数のパラメーターが必要になるたびに、メソッドを再度オーバーロードする必要があるためです。この時点で、整数の配列をパラメータとして渡すことを検討できますが、これは実際のパラメータをラップし、メソッドが新しいデータ型に明示的に依存するようにするだけです。
これらの場合のために、別のタイプの可視構造でラップする必要なく、無限の数のパラメータを受け入れるための 可変個関数 が存在します。 Java の内部的な動作は、可変引数関数に渡されるパラメーターを含む配列の作成であるため、配列のメソッドを操作できることを考慮することが重要です。
可変引数関数は通常の関数と同じ方法で宣言されますが、パラメータとして、その関数が持つ最後のパラメータまたは唯一のパラメータは、データ型...変数名という形式に準拠する必要があります。宣言方法内で変更されるのは、データ型の後ろに 3 つのドットが追加されることだけです。一部の言語では、このタイプのパラメータは varargs として知られています。 summation メソッドが可変個引数関数とどのように似ているかを見てみましょう。
public static int summation(int... numbers) { int sum = 0; for (int number : numbers) { sum += number; } return sum; }
これで、合計メソッドをオーバーロードすることなく、任意の数の数値を追加できるようになりました。ただし、すべての数値が同じデータ型でなければならないという唯一の制限があります。
System.out.println(summation(1, 2)); // 3 System.out.println(summation(1, 2, 3)); // 6 System.out.println(summation(1, 2, 3, 4)); // 10 System.out.println(summation(2, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)); // 4090
Java は内部的に可変個引数関数のパラメーターを配列として処理する、つまり配列内でラップするため、配列のメソッドを操作できるようになると前述しました。たとえば、Arrays クラスの sum メソッドを使用して、summation メソッド内で配列のすべての要素を追加できます。
public static int summation(int... numbers) { return Arrays.stream(numbers).sum(); }
上記のことを考慮すると、どんなに奇妙に思えても、可変個引数関数には、受け入れるデータの型の配列をパラメータとして渡すこともできます。この方法では、配列が引数として直接渡されるため、Java はパラメーターを配列でラップする必要がなくなりました。
public static int summation(int a, int b) { return a + b; }
しかし、可変長関数として宣言されたときにすでに受け取ることができる n 整数に加えて、何らかの理由で加算メソッドが double 型の 2 番目のパラメーターを必要とする場合はどうなるでしょうか。この場合、以下に示すように、必要な追加パラメータと最後に可変引数パラメータまたは varargs を使用して加算メソッドを宣言する必要があります。
public static int summation(int a, int b, int c) { return a + b + c; }
この方法では、最初のパラメータとして double の数値を渡し、追加のパラメータとして追加する整数を渡すことができます。Java は、最初のパラメータが double 型で、次のパラメータが int 型であることを自動的に認識します。パラメータ variadic は、常に関数の最初のパラメータではなく最後のパラメータである必要があります。関数の最初のパラメータではなく、コンパイル エラーが発生するためです。IDE 自体からも次のように指示されます: varargs パラメータは最後のパラメータである必要があります。
public static int summation(int a, int b, int c, int d) { return a + b + c + d; }
結論として、不特定の数のパラメーターを使用して何らかの操作を実行するために何らかのユーティリティ関数が必要で、配列やリストを明示的に渡したくない場合は、可変個引数関数の使用を検討できます。これらは便利で、コードをよりクリーンかつスケーラブルにし、メソッドのオーバーロードを回避します。
以上がJava の可変引数関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
