ホームページ >Java >&#&チュートリアル >Java は、NULL 引数によるメソッドのオーバーロードの曖昧さをどのように解決するのでしょうか?
Null 引数によるメソッドのオーバーロード: あいまいさの解決
Java のメソッドのオーバーロードでは、名前は同じだがパラメーターが異なる複数のメソッドを使用できます。ただし、null 引数を指定してメソッドを呼び出す場合、適用可能なメソッドが複数ある場合、コンパイラはあいまいさを引き起こす可能性があります。
指定されたコード スニペットには、Object、char[]、および char[] のパラメータを持つ 3 つの doSomething メソッドがあります。整数。 doSomething(null) を呼び出すと、あいまいなメソッド エラーが発生します。この問題を詳しく見てみましょう。
曖昧さの解決
Java は、最も具体的な適用可能なメソッド バージョンを優先します (JLS §15.12.2)。 3 つのメソッドはすべて有効な引数として null を受け入れ、同様に適用できます。
Object と char[]
Object は char[] のスーパータイプです。つまり、 char[] は Object よりも具体的です。したがって、Object メソッドと char[] メソッドのみが存在する場合は、char[] メソッドが選択されます。
Object vs. Integer
ただし、両方の char では、 [] メソッドと Integer メソッドが存在しますが、どちらも他方よりも具体的ではありません。 Java はどちらを呼び出すかを決定できず、あいまいさが生じます。
解決策
あいまいさを解決するには、null 引数を目的の型に明示的にキャストします。
doSomething((Integer) null);
この場合、コンパイラーは明示的に doSomething(Integer obj) を呼び出します。
実際の関連性
null 引数によるあいまいさは、考えられているほど一般的ではありません。通常、この問題は、null を使用してメソッドを明示的に呼び出す場合、または指定されていない型の変数 (Object など) を使用する場合に発生します。
対照的に、次のようなメソッドに変数を渡す場合は、
char[] x = null; doSomething(x);
Java は、null 値を渡しても、変数の型に基づいて目的のメソッドを正しく決定します。
以上がJava は、NULL 引数によるメソッドのオーバーロードの曖昧さをどのように解決するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。