ホームページ >Java >&#&チュートリアル >Java は、Null 引数を渡すときにオーバーロードされたメソッドのあいまいさをどのように解決しますか?
Null 引数のメソッドのオーバーロード: あいまいさの解決
メソッドのオーバーロードにより、クラスは同じ名前で異なるパラメーター リストを持つ複数のメソッドを定義できます。これにより柔軟性が得られますが、null 引数を扱うときに曖昧さが生じる場合があります。
次の Java コードを考えてみましょう。
public static void doSomething(Object obj) { System.out.println("Object called"); } public static void doSomething(char[] obj) { System.out.println("Array called"); } public static void doSomething(Integer obj) { System.out.println("Integer called"); }
doSomething(null) を呼び出すと、コンパイラはあいまいなメソッドによるエラー。これは、3 つのパラメーター タイプ (Object、char[]、Integer) のいずれにも null を割り当てることができるためです。
曖昧さの判断
曖昧さを理解するには、次のようにします。メソッドのオーバーロードにおける特異性の概念を考慮する必要があります。 Java は、最も具体的な適用可能なメソッドを優先して呼び出します。この場合、3 つのメソッドはすべて null を受け入れる可能性があります。
ただし、char[] と Integer は、割り当てられる値の範囲が狭いため、Object よりも具体的です。したがって、doSomething(Object) と doSomething(char[]) のみが存在する場合、Java は後者を選択します。
あいまいさの解決
両方が doSomething(char []) と doSomething(Integer) が使用可能ですが、どちらも他方より具体的ではありません。これによりあいまいさが生じ、コンパイラが強制的に失敗します。
これを解決するには、null 引数を目的の型にキャストして、呼び出すメソッドを明示的に指定する必要があります。例:
doSomething((char[]) null);
実際的な考慮事項
実際には、null 引数によるメソッドのオーバーロードは、思っているほど一般的ではありません。通常、メソッドで必要な場合を除き、明示的に null を渡すことはありません。null を渡す場合は、通常、特定の型を念頭に置いています。
これらの考慮事項を念頭に置くことで、オーバーロードされたメソッドが確実にオーバーロードされるようにすることができます。明確なままにし、null 引数を処理する際のコンパイラ エラーを防ぎます。
以上がJava は、Null 引数を渡すときにオーバーロードされたメソッドのあいまいさをどのように解決しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。