ホームページ  >  記事  >  Java  >  Java メソッドのオーバーロードで null 値が `String` オーバーロードを選択するのはなぜですか?

Java メソッドのオーバーロードで null 値が `String` オーバーロードを選択するのはなぜですか?

DDD
DDDオリジナル
2024-11-09 08:43:02283ブラウズ

Why does a null value choose the `String` overload in Java method overloading?

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 を含む任意のオブジェクト型を受け入れることができます。ただし、me​​thod(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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。