CreateTime--2017年9月15日14:42:40
Author:Marydon
java如何實現不固定個數傳參(定義實參個數可變的方法)
參考鏈接:原文鏈接
傳統方法:為這個方法定義一個數組型的參數,將不確定的參數放到數組中,把這個數組作為一個實參傳遞過去
舉例:
// 定義帶有數組型參數的方法 int getSum(int[] params) { } // 調用 getSum(1,2,3);
方法:借助Varargs機制
J2SE 1.5提供了“Varargs”機制。借助這一機制,可以定義能和多個實參相匹配的形參。從而,可以用一種更簡單的方式,來傳遞個數可變的實參;
Varargs:"variable number of arguments"
舉例:
/** * 求和 * @description * 定義實參個數可變 * @param params * >=0個int類型實參 * @return */ static int getSum(int... params) { // 和 int sum = 0; for (int i : params) { sum += i; } return sum; } // 調用 int sum = Test.getSum(1,2,3); System.out.println(sum); // 6
注意事項:
1.java不支持泛型數組,當數組元素類型不確定時,可以使用Object來定義該數組的數據類型;
2.不能確定的參數個數的方法在定義時,該形參必須放在方法的最后一個參數;
否則,編譯報錯:The variable argument type int of the method getSum must be the last parameter
3.不能再為這個類定義一個和轉化后的方法簽名一致的方法;
否則,編譯報錯:Duplicate method getSum(int[]) in type Test
原因:在class文件編譯時實際上將匹配不確定個實參的形參,轉化為數組形參,即
static int getSum(int[] params) { // 和 int sum = 0; for (int i : params) { sum += i; } return sum; }
4.傳0個實參時,傳遞過去的是一個空數組,而不是null;
5. 傳統方式與這種方式的區別在於:這種方式傳參時不必將參數先封裝到一個數組里面。