ホームページ >Java >&#&チュートリアル >Java は、NULL 引数によるメソッドのオーバーロードの曖昧さをどのように解決するのでしょうか?

Java は、NULL 引数によるメソッドのオーバーロードの曖昧さをどのように解決するのでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-31 21:33:14396ブラウズ

How Does Java Resolve Method Overloading Ambiguity with Null Arguments?

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 サイトの他の関連記事を参照してください。

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