[英]How to call a varargs method with an additional argument from a varargs method
[英]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.