Java "tham số" trong chữ ký phương thức?


112

Trong C #, nếu bạn muốn một phương thức có số lượng tham số không xác định, bạn có thể đặt tham số cuối cùng trong chữ ký phương thức a paramsđể tham số phương thức trông giống như một mảng nhưng cho phép mọi người sử dụng phương thức truyền nhiều tham số kiểu đó. như người gọi muốn.

Tôi khá chắc chắn Java hỗ trợ hành vi tương tự, nhưng tôi không thể tìm ra cách thực hiện nó.

Câu trả lời:


194

Trong Java, nó được gọi là varargs và cú pháp trông giống như một tham số thông thường, nhưng có dấu chấm lửng ("...") sau kiểu:

public void foo(Object... bar) {
    for (Object baz : bar) {
        System.out.println(baz.toString());
    }
}

Tham số vararg phải luôn là tham số cuối cùng trong chữ ký phương thức và được truy cập như thể bạn nhận một mảng kiểu đó (ví dụ: Object[]trong trường hợp này).


3
Cảm ơn tôi đã tự mình tìm ra điều này trong khi tôi đang tìm kiếm thứ gì đó khác và đến đây để tự trả lời câu hỏi.
Omar Kooheji

11

Điều này sẽ thực hiện thủ thuật trong Java

public void foo(String parameter, Object... arguments);

Bạn phải thêm ba điểm ...varagrtham số phải là tham số cuối cùng trong chữ ký của phương thức.


3

Như nó được viết trên các câu trả lời trước, nó được varargskhai báo bằng ellipsis( ... )

Hơn nữa, bạn có thể chuyển các loại giá trị và / hoặc các loại tham chiếu hoặc cả hai kết hợp (google Autoboxing ). Ngoài ra, bạn có thể sử dụng tham số phương thức như một mảng như được hiển thị với printArgsAlternatephương thức bên dưới.

Mã Demo

public class VarargsDemo {

    public static void main(String[] args) {
        printArgs(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
        printArgsAlternate(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
    }

    private static void printArgs(Object... arguments) {
        System.out.print("Arguments: ");
        for(Object o : arguments)
            System.out.print(o + " ");

        System.out.println();
    }

    private static void printArgsAlternate(Object... arguments) {
        System.out.print("Arguments: ");

        for(int i = 0; i < arguments.length; i++)
            System.out.print(arguments[i] + " ");

        System.out.println();
    }

}

Đầu ra

Arguments: 3 true Hello! true 25.3 a X 
Arguments: 3 true Hello! true 25.3 a X 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.