ホームページ >Java >&#&チュートリアル >Java は Null 引数によるメソッドのオーバーロードをどのように処理しますか?

Java は Null 引数によるメソッドのオーバーロードをどのように処理しますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-21 16:05:10688ブラウズ

How Does Java Handle Method Overloading with Null Arguments?

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) を呼び出そうとすると、コンパイラはあいまいなエラーを検出します。メソッドエラー。これは、Object メソッドと char[] メソッドの両方が適用可能であり、Java がどちらを呼び出すかを決定できないために発生します。

この問題は、Object、char を含む任意の参照型の変数に null を割り当てることができるという事実に起因します。 []、および整数。これらの各メソッドは互換性のある参照型を受け入れるため、Java は最も具体的に適用可能なメソッドを特定する際にジレンマに直面します。

この曖昧さを解決するために、最も具体的に適用可能なメソッドが選択されます。この場合、char[] はサブタイプであるため、Object よりも具体的です。したがって、メソッドを指定せずに doSomething(null) を呼び出すと、char[] バージョンが選択されます。

ただし、char[] バージョンと Integer バージョンの両方が使用可能な場合、状況はさらに困難になります。どちらのメソッドも同様に具体的であり、Java は一方を他方よりも恣意的に選択することはできません。このような場合、目的のメソッドを指定するには明示的なキャストが必要です。

例:

doSomething((char[]) null);  // Calls doSomething(char[])

結論として、適用可能なメソッドが複数存在する場合、null 引数を使用したメソッドのオーバーロードはあいまいさを引き起こす可能性があります。 。パラメータのタイプに基づいて最も具体的なメソッドが選択されますが、明確な勝者がない場合は、競合を解決するために明示的なキャストが必要です。

以上がJava は Null 引数によるメソッドのオーバーロードをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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