11/08/2018, 18:44

Varargs trong Java – đối số linh động

Học java collection Variable Argument – Varargs trong Java cho phép phương thức chấp nhận các đối số zero hoặc muliple . Trước khi varargs, chúng ta sử dụng overload phương thức hoặc lấy một mảng làm tham số method nhưng nó không phải là phương án tốt. Nếu chúng ta không biết có ...

Học java collection

Variable Argument – Varargs trong Java cho phép phương thức chấp nhận các đối số zero hoặc muliple. Trước khi varargs, chúng ta sử dụng overload phương thức hoặc lấy một mảng làm tham số method nhưng nó không phải là phương án tốt. Nếu chúng ta không biết có bao nhiêu đối số được truyền vào phương thức, varargs là cách tiếp cận tốt hơn.

Lợi thế của Varargs:

Tiết kiệm code vì chúng ta không cần phải overload phương thức.

Cú pháp của varargs:

Các varargs sử dụng dấu ba chấm (…) sau kiểu dữ liệu. Cú pháp như sau:

return_type method_name(data_type... variableName) {
    // code
}

Ví dụ Varargs trong java

Ví dụ sau in ra số lượng đối số và tổng các đối số:

package vn.viettuts;

public class VarargsExample1 {
    public static void add(int... values) {
        int total = 0;
        for (int i = 0; i < values.length; i++) {
            total = total + values[i];
        }
        System.out.println("So doi so: " + values.length);
        System.out.println("Tong = " + total);
    }

    public static void main(String[] args) {
        add();
        add(1, 2);
        add(1, 2, 3);
        add(1, 2, 3, 4);
    }
}

Kết quả:

So doi so: 0
Tong = 0
So doi so: 2
Tong = 3
So doi so: 3
Tong = 6
So doi so: 4
Tong = 10

Các nguyên tắc đối với varargs trong java

Trong khi sử dụng các varargs, bạn phải tuân theo một số quy tắc nếu không chương trình sẽ bị lỗi biên dịch, như sau:

  • Chỉ có thể chỉ định một đối số varargs cho phương thức.
  • Đối số varargs phải ở vị trí cuối cùng.

Ví dụ về varargs không biên dịch được:

void method(String... a, int... b) {} //Compile time error
void method(int... a, String b) {}    //Compile time error

Ví dụ varargs ở vị trí cuối cùng:

package vn.viettuts;

public class VarargsExample1 {
    public static void add(int num, int... values) {
        int total = num;
        for (int i = 0; i < values.length; i++) {
            total = total + values[i];
        }
        System.out.println("So doi so: " + (values.length + 1));
        System.out.println("Tong = " + total);
    }

    public static void main(String[] args) {
        add(1);
        add(1, 2);
        add(1, 2, 3);
        add(1, 2, 3, 4);
    }
}

Kết quả:

So doi so: 1
Tong = 1
So doi so: 2
Tong = 3
So doi so: 3
Tong = 6
So doi so: 4
Tong = 10
Học java collection
0