public void printAll(String... messages) { // 內部為 String[]
for (String m : messages) System.out.println(m);
}
// 呼叫
printAll("A", "B", "C");
printAll(new String[]{"X", "Y"}); // 也可傳陣列
String.format, Log.info, Arrays.asList。query.select("id", "name", "age").from("user")。new String[]{...}。List<T>、Set<T>。varargs 無法區分「零參數」與「空陣列」,集合語義明確。varargs 隱含陣列分配,頻繁呼叫增加 GC 壓力;可改為重載 void printAll(String a, String b) 等固定參數版本。// API 設計:對外暴露集合,內部可用 varargs 輔助
public void processItems(List<Item> items) { ... } // 標準介面
public void processItems(Item... items) { processItems(Arrays.asList(items)); } // 便利重載
總結:參數數量不定且只讀用 varargs;需修改、傳遞、持久化用集合。