Java での可変長パラメーターの使用例
Java5 では変数パラメーター (varargs) が提供されています。つまり、メソッド定義では不確実な数のパラメーターを使用でき、print("hello") のように同じメソッドを異なる数のパラメーターで呼び出すことができます。 print( "hello","lisi");print("hello","Zhang San", "alexia");次に、可変長パラメーターの定義方法と可変長パラメーターの使用方法について説明します。
1. 可変長パラメータの定義
Use... を使用して、
print(String... args){
...
} などの可変長パラメータを表現します。 可変長パラメータを持つメソッドでは、パラメータを配列として使用できます。ループ値で出力できます。
print(String... args){
for(String temp:args)
System.out.println(temp);
}2. 可変長パラメーターを使用したメソッドの呼び出し
呼び出し時に任意の数のパラメーターを指定することも、パラメーターを指定しないこともできます:
print();
print("hello");
print("hello","lisi");
print("hello","张三", "alexia")3. 可変長パラメーターを使用する場合のルール
3.1 メソッドを呼び出すとき、固定パラメータ方式または可変長パラメータ方式に一致する場合は、固定パラメータ方式を選択します。次のコードの出力を見てください:
package com;
// 这里使用了静态导入
import static java.lang.System.out;
public class VarArgsTest {
public void print(String... args) {
for (int i = 0; i < args.length; i++) {
out.println(args[i]);
}
}
public void print(String test) {
out.println("----------");
}
public static void main(String[] args) {
VarArgsTest test = new VarArgsTest();
test.print("hello");
test.print("hello", "alexia");
}
}3.2 呼び出されるメソッドが 2 つの変数パラメーターに一致する場合、次のコードのようなエラーが発生します:
package com;
// 这里使用了静态导入
import static java.lang.System.out;
public class VarArgsTest1 {
public void print(String... args) {
for (int i = 0; i < args.length; i++) {
out.println(args[i]);
}
}
public void print(String test,String...args ){
out.println("----------");
}
public static void main(String[] args) {
VarArgsTest1 test = new VarArgsTest1();
test.print("hello");
test.print("hello", "alexia");
}
}上記のコードでは、2 つの呼び出しのどちらも以下に示すように、コンパイラはどのメソッドを呼び出すべきかわからないため、コンパイルは成功します:
3.3 メソッドは可変長パラメータを 1 つだけ持つことができ、この可変長パラメータはメソッドの最後のパラメータである必要があります。
以下の2つ どちらのメソッド定義も間違っています。 4. 可変長パラメータの使用仕様
4.1 可変長パラメータによるメソッドのオーバーロードを避ける: 3.1 と同様、コンパイラは呼び出し方法を知っていますが、人々は呼び出しの罠や誤解に簡単に陥る可能性があります
4.2 null 値を許可しない3.2 に示すように、null 値は可変長メソッドの脅威となります。null 値の呼び出しを説明するために、新しい例を示します:
package com;public class VarArgsTest1 {
public void print(String test, Integer... is) {
}
public void print(String test,String...args ){
}
public static void main(String[] args) {
VarArgsTest1 test = new VarArgsTest1();
test.print("hello");
test.print("hello", null);
}
}この時点で、両方の呼び出しがコンパイルに失敗することがわかります。 :
両方のメソッドが一致するため、コンパイラはどちらを選択すればよいのか分からず、エラーを報告しました。これは、呼び出し側が実際のパラメータの型を隠すという非常に悪いコーディング習慣もあります。危険です。呼び出し側がどのメソッドを呼び出すかを「推測」する必要があるだけでなく、呼び出し先でも内部ロジックが混乱している可能性があります。この例では、次の変更を行う必要があります:
public static void main(String[] args) {
VarArgsTest1 test = new VarArgsTest1();
String[] strs = null;
test.print("hello", strs);
}4.3 可変長メソッドのオーバーライドもルールに従う必要があります
プログラムがコンパイルされて渡されるかどうかを推測してみましょう:
package com;
public class VarArgsTest2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 向上转型
Base base = new Sub();
base.print("hello");
// 不转型
Sub sub = new Sub();
sub.print("hello");
}
}
// 基类
class Base {
void print(String... args) {
System.out.println("Base......test");
}
}
// 子类,覆写父类方法
class Sub extends Base {
@Override
void print(String[] args) {
System.out.println("Sub......test");
}
}答えはもちろん、コンパイルが通るかどうかです。それは奇妙だと思いませんか?
最初のものはコンパイルして渡すことができます。これはなぜですか?実際、基本オブジェクトはサブクラス オブジェクト sub を上方変換します。仮パラメータ リストは親クラスによって決定され、もちろん渡すことができます。サブクラスからの直接呼び出しを見ると、コンパイラはサブクラスが親クラスの print メソッドをオーバーライドしたことを認識するため、サブクラスによって再定義された print メソッドを使用する必要があります。パラメータ リストが一致しない場合でも、コンパイラは実行されません。親クラスとのマッチングを再試行します。一度見つかると、それ以上は検索されないため、型の不一致エラーが発生します。
これは特殊なケースです。オーバーライドされたメソッドのパラメーター リストは、オーバーライドの定義に違反し、説明できないエラーが発生します。
ここで、上書きするために満たさなければならない条件を要約します。
(1) オーバーライドされたメソッドはアクセス権を減らすことができません。
(2) パラメータリストはオーバーライドされたメソッドと同じである必要があります (表示フォームを含む)。
(3) 戻り値の型は、オーバーライドされたメソッドまたはそのサブクラスと同じである必要があります。
(4) オーバーライドされたメソッドは、新しい例外、または親クラスのスコープを超える例外をスローできませんが、スローする例外の数は少なくなります。限定された例外 例外、または例外がスローされない。
最後に、トラップを使用した例を示します。出力結果は誰もが知っているはずです:
package com;
public class VarArgsTest {
public static void m1(String s, String... ss) {
for (int i = 0; i < ss.length; i++) {
System.out.println(ss[i]);
}
}
public static void main(String[] args) {
m1("");
m1("aaa");
m1("aaa", "bbb");
}
}以上がJava での可変長パラメーターの使用例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
ホットAIツール
Undress AI Tool
脱衣画像を無料で
Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ
AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。
Clothoff.io
AI衣類リムーバー
Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。
人気の記事
ホットツール
メモ帳++7.3.1
使いやすく無料のコードエディター
SublimeText3 中国語版
中国語版、とても使いやすい
ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
ドリームウィーバー CS6
ビジュアル Web 開発ツール
SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
ホットトピック
8652
17
1793
16
1735
56
1585
29
1457
31
PHPコメントを書くためのヒント
Jul 18, 2025 am 04:51 AM
PHPコメントを書くための鍵は、目的と仕様を明確にすることです。コメントは、「何が行われたのか」ではなく「なぜ」を説明する必要があり、冗長性や単純さを避けてください。 1.読みやすさとツールの互換性を向上させるために、クラスおよびメソッドの説明にdocblock(/*/)などの統合形式を使用します。 2。JSジャンプを手動で出力する必要がある理由など、ロジックの背後にある理由を強調します。 3.複雑なコードの前に概要説明を追加し、手順でプロセスを説明し、全体的なアイデアを理解するのに役立ちます。 4. TodoとFixmeを合理的に使用して、To Doアイテムと問題をマークして、その後の追跡とコラボレーションを促進します。優れた注釈は、通信コストを削減し、コードメンテナンスの効率を向上させることができます。
PHP開発環境のセットアップ
Jul 18, 2025 am 04:55 AM
最初のステップは、統合環境パッケージXAMPPまたはMAMPを選択してローカルサーバーを構築することです。 2番目のステップは、プロジェクトのニーズに応じて適切なPHPバージョンを選択し、複数のバージョンの切り替えを構成することです。 3番目のステップは、editorとしてvscodeまたはphpstormを選択し、xdebugでデバッグすることです。さらに、開発を支援するために、作曲家、PHP_CODESNIFFER、PHPUNIT、およびその他のツールをインストールする必要があります。
PHP比較演算子
Jul 18, 2025 am 04:57 AM
PHP比較演算子は、変換のタイプの問題に注意を払う必要があります。 1。==を使用すると値のみを比較すると、1 == "1"などのタイプ変換が実行されます。 2。===を使用するには、1 === "1"などのタイプと同じ値を必要とします。 3。サイズの比較は、「Apple」などの値や文字列で使用できます。
構文をコメントするPHP
Jul 18, 2025 am 04:56 AM
PHPコメントを使用するには3つの一般的な方法があります。単一ラインコメントは、現在の行の説明のために//などのコードロジックを簡単に説明するのに適しています。マルチラインコメント/*...*/関数またはクラスの詳細な説明に適しています。ドキュメントコメントdocblockは /**で起動して、IDEの迅速な情報を提供します。それを使用する場合、ナンセンスを避け、同期して更新し続け、コメントを使用してコードを長時間ブロックしないでください。
オーディオ/ビデオ処理に移動します
Jul 20, 2025 am 04:14 AM
オーディオとビデオ処理の中核は、基本的なプロセスと最適化方法を理解することにあります。 1.基本的なプロセスには、取得、エンコード、送信、デコード、再生が含まれ、各リンクには技術的な困難があります。 2。オーディオおよびビデオの異常、遅延、音のノイズ、ぼやけた画像などの一般的な問題は、同期調整、コーディング最適化、ノイズ減少モジュール、パラメーター調整などを通じて解決できます。 3. FFMPEG、OPENCV、WeBRTC、GSTREAMER、およびその他のツールを使用して機能を達成することをお勧めします。 4.パフォーマンス管理の観点から、ハードウェアの加速、解像度フレームレートの合理的な設定、並行性の制御、およびメモリの漏れの問題に注意を払う必要があります。これらの重要なポイントを習得すると、開発効率とユーザーエクスペリエンスの向上に役立ちます。
Laravelのローカリゼーションのために翻訳者ファサードを使用します。
Jul 21, 2025 am 01:06 AM
TheTranSlatorFacadeInLARAVELISUSEDEFORALIZATIONBYFETCHINGTRANSLEATENSTRINGSNANDSWITCHINGLAGUAGESATRUNTIME.TOUSEIT、STORETRANSLATIONSTRINGSINLANGUAGEFILESTRINGSINLANGHELANGDIRECTORY(例えば、ES、FR)、TONRRETRIEVETHEMVIALANG :: get()Orthe ___()Helperfuntiction、
ブロックコメントでPHPを文書化します
Jul 18, 2025 am 04:53 AM
PHPブロックアノテーションを作成すると、コードの読みやすさとメンテナンスが向上します。 @Param、@Return、@Throwsなどの情報を含め、「理由」と「使用方法」を説明し、意味のない繰り返しを避け、コードと同期して更新し、IDEはプロンプトを自動的に認識できます。
チームのPHPコメント
Jul 18, 2025 am 04:54 AM
良いコメントを書くことは、特にPHPプロジェクトではチームワークにとって重要です。重要なのは、有用なコメントを書く方法です。 1.ドックブロックを使用して、パラメーターや戻り値タイプを含む関数の目的を明確にし、IDEの認識と開発効率を向上させます。 2。重要な判断条件または特別な処理を説明するために、複雑なロジックにインラインコメントを追加します。 3.注釈スタイルを統合し、形式とコンテンツの要件を標準化し、ツールを使用して一貫性を確保します。


