Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのVarargsにおけるメソッドのオーバーロードとあいまいさ


Javaで変数引数を使用する場合、あいまいさがあります。これは、2つのメソッドがデータ値によって呼び出されるのに十分有効であるために発生します。このため、コンパイラはどのメソッドを呼び出すかについての知識を持っていません。

public class Demo {
   static void my_fun(double ... my_Val){
      System.out.print("fun(double ...): " + "Number of args: " + my_Val.length );
      for(double x : my_Val)
      System.out.print(x + " ");
      System.out.println();
   }
   static void my_fun(boolean ... my_Val){
      System.out.print("fun(boolean ...) " + "The number of arguments: " + my_Val.length);
      for(boolean x : my_Val)
      System.out.print(x + " ");
      System.out.println();
   }
   public static void main(String args[]){
      my_fun(11.56, 34.78, 99.09, 56.66);
      System.out.println("Function 1 has been successfully called");
      my_fun(true, false, true, false);
      System.out.println("Function 2 has been successfully called");
      my_fun();
      System.out.println("Function 3 has been successfully called");
   }
}

出力

Demo.java:23: error: reference to my_fun is ambiguous
my_fun();
^
both method my_fun(double...) in Demo and method my_fun(boolean...) in Demo match
1 error

Demoという名前のクラスは、可変数の浮動小数点値を受け取る「my_fun」という名前の関数を定義します。値は、「for」ループを使用してコンソールに出力されます。この関数はオーバーロードされており、パラメーターは数が変化するブール値です。出力は「for」ループを使用してコンソールに表示されます。

main関数では、「my_fun」は最初に浮動ppoint値を使用して呼び出され、次にブール値を使用して呼び出され、次にパラメーターなしで呼び出されます。結果として生じる例外は、コンソールに表示されます。


  1. Javaでのメソッドのオーバーロードと型の昇格

    メソッドのオーバーロードは、同じ名前の複数のメソッドを作成して、異なるタイプのパラメーターに対して同様のアクションを実行するのに役立ちます。 変数が類似したタイプの場合は、タイププロモーションを使用できます。タイププロモーションは、低い範囲の値を高い範囲の値に自動的にプロモートします。たとえば、バイト変数をint変数に割り当てることができます。ここで、バイト変数はintに型昇格されます。バイト、ショート、または整数の2つの数値を追加する場合は、単一のメソッドを使用できます。以下の例を参照してください- 例 public class Tester {    public st

  2. Javaでのメソッドのオーバーロード

    メソッドのオーバーロードは、静的ポリモーフィズムの一種です。メソッドのオーバーロードでは、同じ名前で異なるパラメーターを使用して複数のメソッドを定義できます。次のサンプルプログラムについて考えてみます。 例 public class Tester {    public static void main(String args[]) {       Tester tester = new Tester();       System.out.println(tester.add(1, 2));   &nb