ホームページ >Java >&#&チュートリアル >Java は、Null 引数を渡すときにオーバーロードされたメソッドのあいまいさをどのように解決しますか?

Java は、Null 引数を渡すときにオーバーロードされたメソッドのあいまいさをどのように解決しますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 18:53:09938ブラウズ

How Does Java Resolve Ambiguity in Overloaded Methods When Passing Null Arguments?

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

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