Java 中可變引數的方法過載與歧義


在 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”迴圈將輸出顯示在控制檯上。

在 main 函式中,首先使用浮點值呼叫“my_fun”,然後使用布林值呼叫,然後在沒有任何引數的情況下呼叫。它導致的異常將顯示在控制檯上。

更新於:2020-7-13

1 千次+瀏覽

開啟您的 職業生涯

完成本課程獲得認證

開始
廣告
© . All rights reserved.