Null 値を使用したオーバーロードされたメソッドの選択
Java では、オーバーロードされたメソッドは、異なるパラメーターまたは戻り値の型を持つ複数のバージョンを提供し、柔軟性とコードを可能にします。再利用。ただし、null リテラル値を渡すときに正しいメソッドを選択すると、混乱が生じる可能性があります。
次の例を考えてみましょう。
public class MoneyCalc { public void method(Object o) { System.out.println("Object Verion"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { MoneyCalc question = new MoneyCalc(); question.method(null); } }
ここでは、メソッド method(null) がメソッドを選択します。 null がオブジェクト型であっても、(String) オーバーロード。この動作を理解するには、オーバーロードに対する Java のアプローチを調べる必要があります。
Null 値によるメソッド選択
Java では、コンパイラは、メソッドを処理できる最も具体的なオーバーロードを選択します。型エラーなしで引数が提供されました。たとえば、method(Object) は、null を含む任意のオブジェクト型を受け入れることができます。ただし、method(String) は String または null のみを受け入れることができます。 null は有効な String 値であるため、method(String) がより具体的であるため、選択されます。
曖昧さとコンパイル エラー
以下の修正された例では:
public class MoneyCalc { public void method(StringBuffer sb) { System.out.println("StringBuffer Verion"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { MoneyCalc question = new MoneyCalc(); question.method(null); } }
コンパイラは、「メソッドメソッド(StringBuffer)はMoneyCalc型ではあいまいです。」というエラーをスローします。これは、method(String) とmethod(StringBuffer) の両方が null 引数に対して同様に固有であるためです。その結果、コンパイラはどのオーバーロードを選択するかを決定できず、コンパイル エラーが発生します。
以上がJava メソッドのオーバーロードで null 値が `String` オーバーロードを選択するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。