メソッドのオーバーロードと Null 値パラメーター
オーバーロードされたメソッドを使用すると、名前は同じでパラメーター リストが異なる複数のメソッドをクラス内に共存させることができます。オーバーロードされたメソッドを呼び出すとき、コンパイラは渡されたパラメータ リストに基づいて最も適切なメソッドを選択します。ただし、null 値がパラメーターとして渡されると、特定の動作が発生します。
次のコードを考えてみましょう。
public class MoneyCalc { public void method(Object o) { System.out.println("Object Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String[] args) { MoneyCalc question = new MoneyCalc(); question.method(null); } }
このコードでは、メソッドメソッドに null を渡すと、 「オブジェクトバージョン」の代わりに「文字列バージョン」が実行されます。これは、null が String を含む任意のクラス型に暗黙的に変換できるためです。したがって、コンパイラは、null 参照の推論された型に最もよく一致するメソッド オーバーロードを選択します。この場合は String です。
次に、コードを少し変更します。
public class MoneyCalc { public void method(StringBuffer sb) { System.out.println("StringBuffer Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String[] args) { MoneyCalc question = new MoneyCalc(); question.method(null); } }
今回は、 StringBuffer メソッドと String メソッドの両方が null 参照に同様に適用できるため、あいまいさが発生します。どちらのメソッドも他のメソッドよりも具体的ではないため、コンパイラはこのコードに対してコンパイル時エラーを発生させます。
以上がメソッドのオーバーロードが Null 値で異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。