あいまいな Null 引数によるメソッドのオーバーロード
メソッドのオーバーロードに null 値を受け入れることができるパラメーターが含まれる場合、Java は適切なメソッドを選択する際にあいまいさが発生する可能性があります。呼び出すこと。この問題を理解するために、例を詳しく見てみましょう。
パラメータを含む次の 3 つのメソッドを考えてみましょう:
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 つのメソッドすべてが有効な値として null を受け入れることができるためです。
ただし、この問題は、特に Integer メソッドと char[] メソッドの両方が存在することで発生します。 Object は char[] のスーパータイプであるため、配列のバージョンは Object のバージョンよりも具体的です。したがって、Object メソッドと char[] メソッドのみが存在する場合は、配列バージョンが選択されます。
しかし、整数バージョンも使用できる場合、整数バージョンと配列バージョンの両方がオブジェクト バージョンよりも具体的になります。 。この場合、Java は、null の処理にどのメソッドがより適切であるかを判断できません。
この曖昧さを解決するには、引数を目的の型に明示的にキャストできます。例:
doSomething((char[]) null);
この場合、Java は明確に char[] バージョンを選択します。
実際には、このあいまいさは思っているほど一般的ではありません。通常、メソッドは、null や Object のような高度に汎用的な型に依存するのではなく、特定の型を持つ引数を使用して呼び出されます。ただし、メソッドのオーバーロードや null 値を扱う場合は、この潜在的なあいまいさを理解することが重要です。
以上がJava は Null 引数によるあいまいなメソッドのオーバーロードをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。