Null 引数を使用したメソッドのオーバーロード: あいまいさの解決
Java では、メソッドのオーバーロードにより、名前は同じだがパラメーターの型が異なる複数のメソッドが許可されます。ただし、オーバーロードされたメソッドに null 引数を渡すと、コンパイラ エラーが発生する可能性があります。問題とその解決策を見てみましょう。
次のコード スニペットを考えてみましょう:
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) を呼び出すと、メソッドのあいまいさによりコンパイル エラーが発生します。 Integer、char[]、および Object はすべて null 値を受け入れることができるため、Java はどのバージョンの doSomething を呼び出すかを決定できません。
問題は、Integer メソッドと char[] メソッドの同様に特殊な性質にあります。どちらも、より狭いパラメータ型を定義するため、Object メソッドよりも具体的です。したがって、Java では、一方のメソッドを他方よりも優先することはできません。
この曖昧さを解決するには、引数を目的の型にキャストして、目的のメソッドを明示的に指定する必要があります。例:
doSomething((Object) null); // Calls doSomething(Object obj) doSomething((char[]) null); // Calls doSomething(char[] obj)
または、オーバーロードされたメソッドの 1 つでパラメーターの型を null 非許容にすることもできます。これにより、そのバージョンに引数として null を渡すことができなくなります。例:
public static void doSomething(Object obj) { System.out.println("Object called"); } public static void doSomething(char[] obj) { // Parameter type not nullable System.out.println("Array called"); }
引数をキャストするか、パラメーターの型を null 非許容にすることにより、メソッド呼び出しの曖昧さをなくすための追加情報を Java に提供します。
以上がJavaでNull引数を使用したメソッドのオーバーロードの曖昧さを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。