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

JavaでNull引数を使用したメソッドのオーバーロードの曖昧さを解決するにはどうすればよいですか?

DDD
リリース: 2025-01-01 05:44:10
オリジナル
522 人が閲覧しました

How to Resolve Method Overloading Ambiguity with Null Arguments in Java?

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート