簡體   English   中英

可變參數和無參數方法

[英]Varargs and argument less method

我只是趕上Java 1.5,(是的,我知道還為時過早)。 在嘗試對varargs進行一些練習時,我發現了如下奇怪的地方。 代碼編譯良好,僅當我提供至少一個參數時才調用varargs方法。 這不應該是編譯器錯誤,使用varargs的方法和重載方法。 還是您可能認為有任何特定的用例,這種情況將很有用

public class VarargsExample {
    public static void main(String args[]) {    
        test1();
    }

    public static void test1(int... x) {
        System.out.println("AssertionExample.test1(ARRAY METHOD)");
    }

    public static void test1() {
        System.out.println("AssertionExample.test1(PARAM LESS)");
    }

}

PS:試圖在SO中搜索此內容,但找不到類似的內容。 請原諒我:)

總結,謝謝大家的快速反應。 似乎是正常的方法是一種首選。 如下所示存在單個參數方法的情況相同

public class VarargsExample{  
 public static void main( String args[] ){  


  test1(); 
  test1(2); 
 } 

 public static  void test1(int... x){
     System.out.println("AssertionExample.test1(ARRAY METHOD)");
 }

 public static  void test1(int x){
     System.out.println("AssertionExample.test1(single param METHOD)");
 }

 public static void test1(){
     System.out.println("AssertionExample.test1(PARAM LESS)");
 } 

}  

首先,調用無參數重載,因為它的簽名比使用varargs誇張的簽名更具體。 通常,有兩個執行完全不同的操作的重載方法是一個非常糟糕的主意。 因此,假設無參數調用時,無參數方法與varargs方法具有相同的功能,也就是說,無參數方法是varargs方法的特化。

然后是一個用例。 調用varargs方法始終需要創建一個數組。 雖然,起初我當然不會考慮這么小的優化,但是在某些情況下(例如在緊密循環中),這可能是一筆相當大的開銷。 該方法的無參數版本不需要創建數組,並且還可以包含針對特定情況的其他優化。

有時,一個人看到的專業不止一個,一個沒有參數,一個帶有一個,一個帶有兩個,以及一種通用方法。 例如:

void doSomething() { ... }
void doSomething(String a1) { ... }
void doSomething(String a1, String a2) { ... }
void doSomething(String... as) { ... }

但我建議僅在開發的后期才這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM