Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 Varargs의 메서드 오버로딩 및 모호성

<시간/>

Java에서 변수 인수를 사용하는 동안 모호함이 있습니다. 이것은 두 개의 메소드가 데이터 값에 의해 호출될 만큼 충분히 유효할 수 있기 때문에 발생합니다. 이 때문에 컴파일러는 어떤 메서드를 호출해야 하는지 알지 못합니다.

예시

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' 루프를 사용하여 콘솔에 표시됩니다.

주 함수에서 'my_fun'은 먼저 부동 ppoint 값으로 호출된 다음 부울 값으로 호출된 다음 매개변수 없이 호출됩니다. 결과적으로 발생하는 예외가 콘솔에 표시됩니다.