Parameter Varargs
Definisikan metode yang menerima daftar argumen dengan panjang bervariasi dan gabungkan dengan array.
Parameter Varargs adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Parameter Argumen Variabel
Argumen variabel (daftar argumen dengan panjang yang dapat berubah) memungkinkan Anda mendefinisikan metode yang menerima sejumlah argumen dengan tipe yang sama, yang secara internal diperlakukan sebagai array.
Mendeklarasikan Argumen Variabel
Gunakan Type... name untuk parameter argumen variabel. Parameter ini harus menjadi parameter terakhir dan hanya boleh ada satu dalam setiap metode.
static int sum(int... numbers) {
int total = 0;
for (int n : numbers) total += n;
return total;
}
System.out.println(sum()); // 0 (empty array)
System.out.println(sum(1)); // 1
System.out.println(sum(1, 2, 3)); // 6
System.out.println(sum(1, 2, 3, 4)); // 10
// Can also pass an array
int[] arr = {5, 10, 15};
System.out.println(sum(arr)); // 30Argumen Variabel secara Internal
Argumen variabel hanyalah gula sintaksis. Kompiler mengubah pemanggilan tersebut menjadi pembuatan array di lokasi pemanggilan.
// Calling: sum(1, 2, 3)
// Compiler generates: sum(new int[]{1, 2, 3})
static void printAll(String label, String... items) {
System.out.println(label + ":");
for (String item : items) System.out.println(" - " + item);
}
printAll("Fruits", "Apple", "Banana", "Cherry");
// Fruits:
// - Apple
// - Banana
// - Cherry
printAll("Empty"); // varargs is empty arrayParameter Campuran dengan Argumen Variabel
Parameter argumen variabel harus menjadi parameter terakhir. Anda dapat mencampurnya dengan parameter biasa sebelumnya.
static double average(String label, double... values) {
if (values.length == 0) return 0.0;
double sum = 0;
for (double v : values) sum += v;
double avg = sum / values.length;
System.out.printf("%s average: %.2f%n", label, avg);
return avg;
}
average("Math scores", 92.0, 85.5, 78.0, 95.0);
// Math scores average: 87.62
average("Single value", 100.0);
// Single value average: 100.00Argumen Variabel dengan Tipe Generik
Menggunakan argumen variabel dengan generik menyebabkan peringatan pencemaran memori. Sembunyikan peringatan tersebut dengan @SafeVarargs jika keamanan metode dapat dibuktikan.
import java.util.Arrays;
import java.util.List;
@SafeVarargs // suppresses heap pollution warning
static <T> List<T> listOf(T... elements) {
return Arrays.asList(elements); // safe: we don't store to the array
}
List<String> names = listOf("Alice", "Bob", "Charlie");
System.out.println(names); // [Alice, Bob, Charlie]
List<Integer> scores = listOf(95, 87, 73);
System.out.println(scores); // [95, 87, 73]Argumen Variabel dan Overloading
Jika metode argumen variabel memiliki overload dengan kecocokan persis, kecocokan persis tersebut lebih diprioritaskan. Argumen variabel menjadi pilihan terakhir.
static void log(String msg) { System.out.println("1-arg: " + msg); }
static void log(String m1, String m2) { System.out.println("2-arg: " + m1 + ", " + m2); }
static void log(String... msgs) { System.out.println("varargs: " + msgs.length); }
log("hello"); // 1-arg: hello
log("a", "b"); // 2-arg: a, b
log("a", "b", "c"); // varargs: 3
log(); // varargs: 0printf Menggunakan Argumen Variabel
System.out.printf menggunakan argumen variabel — metode ini menerima string format dan sejumlah argumen dengan tipe apa pun.
// printf signature: printf(String format, Object... args)
System.out.printf("%s ordered %d items for $%.2f%n",
"Alice", 3, 59.97);
// Alice ordered 3 items for $59.97
// String.format is also varargs
String msg = String.format("Error %d: %s", 404, "Not Found");
System.out.println(msg); // Error 404: Not FoundMembangun Logger dengan Argumen Variabel
Mengimplementasikan logger terstruktur sederhana yang menerima pasangan kunci-nilai menggunakan argumen variabel.
static void logEvent(String event, Object... keyValues) {
if (keyValues.length % 2 != 0)
throw new IllegalArgumentException("Key-value pairs required");
StringBuilder sb = new StringBuilder(event);
for (int i = 0; i < keyValues.length; i += 2)
sb.append(" ").append(keyValues[i]).append("=").append(keyValues[i+1]);
System.out.println(sb);
}
logEvent("user.login", "userId", 42, "ip", "192.168.1.1", "success", true);
// user.login userId=42 ip=192.168.1.1 success=truePertimbangan Performa
Setiap pemanggilan argumen variabel membuat array baru di heap. Untuk metode utilitas yang sering dipanggil, sediakan overload dengan jumlah parameter tetap agar alokasi dapat dihindari.
// Java's own EnumSet does this:
static <E extends Enum<E>> EnumSet<E> of(E e) { ... }
static <E extends Enum<E>> EnumSet<E> of(E e1, E e2) { ... }
static <E extends Enum<E>> EnumSet<E> of(E e1, E e2, E e3) { ... }
static <E extends Enum<E>> EnumSet<E> of(E e1, E... rest) { ... }
// Avoids array creation for 1-3 args (most common case)
// Apply the same pattern to your own hot-path APIs:
static void report(String msg) { log(new String[]{msg}); }
static void report(String m1, String m2) { log(new String[]{m1, m2}); }
static void report(String... msgs) { log(msgs); }Argumen Variabel dan null
Memberikan null ke metode argumen variabel bersifat ambigu — Java mungkin menafsirkannya sebagai array null. Gunakan konversi eksplisit untuk menghindari peringatan.
static void printItems(String... items) {
if (items == null) {
System.out.println("null array passed");
return;
}
for (String item : items)
System.out.println(item != null ? item : "(null element)");
}
printItems((String[]) null); // null array passed
printItems(null, "valid"); // (null element), valid
printItems(); // empty array (0 items)Praktik: Pembantu Format String
Pembungkus printf yang aman dan mengembalikan string yang telah diformat, dengan menggunakan argumen variabel agar sesuai dengan gaya format-argumen.
static String fmt(String pattern, Object... args) {
try {
return String.format(pattern, args);
} catch (java.util.IllegalFormatException e) {
return "[FORMAT ERROR: " + e.getMessage() + "]";
}
}
System.out.println(fmt("User %s has %d orders", "Alice", 5));
// User Alice has 5 orders
System.out.println(fmt("Invalid %z format", "arg"));
// [FORMAT ERROR: Conversion = 'z' ...]Pemeriksaan Singkat
Apa tipe parameter argumen variabel di dalam badan metode?
Ringkasan: Parameter Argumen Variabel
Hal-hal penting:
- Argumen variabel (
Type... name) menerima 0 atau lebih argumen, yang secara internal diperlakukan sebagai array - Harus menjadi parameter terakhir — hanya boleh ada satu parameter argumen variabel dalam setiap metode
- Pemanggil dapat memberikan nilai satu per satu atau sebuah array
- Gunakan @SafeVarargs untuk menyembunyikan peringatan pencemaran memori pada argumen variabel generik
- Overload dengan kecocokan persis lebih diprioritaskan daripada overload argumen variabel
- Sediakan overload dengan jumlah parameter tetap untuk metode yang sering dipanggil agar alokasi array dapat dihindari
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Parameter Varargs” gratis?
Ya — teks lengkap “Parameter Varargs” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Parameter Varargs”?
Definisikan metode yang menerima daftar argumen dengan panjang bervariasi dan gabungkan dengan array. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Parameter Varargs” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Aturan Overloading Metode
- Parameter Varargs
- Field Statis dan Konstanta
- Class Utilitas dan Metode Pabrik Statis