「你應該總是只在重載方法的一個版本上使用可變參數列表,或者壓根就不使用它。」——
P105
可變參數 (Type... args) 本質是數組。當重載方法同時存在:
void foo(int... a) {}
void foo(int a, int... b) {} // 編譯器無法區分 foo(1) 調用哪個
調用時產生**歧義**,編譯報錯 reference is ambiguous。
// ✅ 只在一個重載用可變參數
void print(int fixed, int... vars) {}
void print(String msg) {} // 不衝突
// ❌ 兩個重載都用可變參數
void bar(int... a) {}
void bar(String... b) {} // 參數類型不同倒是允許,但易誤用
...。List/Collection 替代可變參數,類型安全且無歧義。foo(int a) vs foo(int a, int... b)),但仍不推薦。詳細分析:Java 可變參數重載陷阱
記住:**可變參數在重載中是「獨生子」**,多一個就歧義,代碼更安全!