Java "params" dalam tanda tangan metode?

112

Di C #, jika Anda ingin suatu metode memiliki jumlah parameter yang tidak dapat ditentukan, Anda dapat membuat parameter terakhir di tanda tangan metode a paramssehingga parameter metode terlihat seperti larik tetapi memungkinkan semua orang yang menggunakan metode untuk meneruskan sebanyak mungkin parameter dari tipe itu seperti yang diinginkan penelepon.

Saya cukup yakin Java mendukung perilaku serupa, tetapi saya tidak dapat menemukan cara melakukannya.

Omar Kooheji
sumber

Jawaban:

194

Di Java, ini disebut varargs , dan sintaksnya terlihat seperti parameter biasa, tetapi dengan elipsis ("...") setelah jenis:

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

Parameter vararg harus selalu menjadi parameter terakhir dalam tanda tangan metode, dan diakses seolah-olah Anda menerima larik dari jenis itu (misalnya Object[]dalam kasus ini).

David Grant
sumber
3
Terima kasih, saya dengan aneh menemukan ini sendiri ketika saya mencari sesuatu yang lain, dan datang ke sini untuk menjawab pertanyaan itu sendiri.
Omar Kooheji
11

Ini akan melakukan trik di Java

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

Anda harus menambahkan tiga poin ...dan varagrparameter harus menjadi yang terakhir dalam tanda tangan metode.

Stefano Driussi
sumber
3

Seperti yang tertulis pada jawaban sebelumnya, itu varargsdan dinyatakan dengan ellipsis( ... )

Selain itu, Anda dapat meneruskan jenis nilai dan / atau jenis referensi atau keduanya campuran (Google Autoboxing ). Selain itu, Anda dapat menggunakan parameter metode sebagai array seperti yang ditunjukkan dengan printArgsAlternatemetode di bawah ini.

Kode 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();
    }

}

Keluaran

Arguments: 3 true Hello! true 25.3 a X 
Arguments: 3 true Hello! true 25.3 a X 
Levent Divilioglu
sumber