Computer >> Máy Tính >  >> Lập trình >> Java

Quá tải phương thức và sự mơ hồ trong Varargs trong Java

Có sự mơ hồ khi sử dụng các đối số biến trong Java. Điều này xảy ra bởi vì hai phương thức chắc chắn có thể đủ hợp lệ để được gọi bởi các giá trị dữ liệu. Do đó, trình biên dịch không biết phương thức nào sẽ gọi.

Ví dụ

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");
   }
}

Đầu ra

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

Một lớp có tên Demo định nghĩa một hàm có tên là ‘my_fun’ nhận số giá trị dấu phẩy động có thể thay đổi được. Các giá trị được in trên bảng điều khiển bằng vòng lặp ‘for’. Hàm này bị quá tải và tham số là các giá trị boolean có số lượng khác nhau. Đầu ra được hiển thị trên bảng điều khiển bằng cách sử dụng vòng lặp "for".

Trong hàm main, đầu tiên ‘my_fun’ được gọi với các giá trị ppoint động, sau đó với các giá trị Boolean và sau đó không có bất kỳ tham số nào. Ngoại lệ mà nó dẫn đến, được hiển thị trên bảng điều khiển.