首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 重載方法中可變參數:只能用在一個重載版本上

     編輯:程式設計疑難解答

原文規則

「你應該總是只在重載方法的一個版本上使用可變參數列表,或者壓根就不使用它。」—— 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) {} // 參數類型不同倒是允許,但易誤用

最佳實踐

  1. **最多一個** 重載使用 ...。
  2. 優先用 List/Collection 替代可變參數,類型安全且無歧義。
  3. 若必須重載,區分**固定參數個數**(如 foo(int a) vs foo(int a, int... b)),但仍不推薦。

參考鏈接

詳細分析:Java 可變參數重載陷阱

記住:**可變參數在重載中是「獨生子」**,多一個就歧義,代碼更安全!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved