Video: INDONESIA Geography Now - LUAR BIASA! REACTION 2024
Java adalah cara terbaik untuk program, tetapi kadang-kadang anda perlu mendapatkan kreatif. Untuk melakukan ini, anda boleh menggunakan parameter jenis wildcard. Katakan anda mempunyai kaedah yang diisytiharkan seperti ini:
public void addItems (ArrayList list)
{
// body of method not shown
}
addItems (ArrayList baru ());
Jawapan: Tidak.
Yang menghairankan kerana
String
adalah subtype
Objek
. Jadi, anda akan fikir parameter yang mengatakan ia menerima
ArrayList
objek menerima
ArrayList
strings.
Malangnya, pewarisan tidak berfungsi dengan begitu cara ketika datang ke parameter jenis formal. Sebaliknya, anda perlu menggunakan ciri generik lain, yang dipanggil wildcard.
Singkatnya, jika anda mahu membuat kaedah yang menerima sebarang jenis
ArrayList
, anda perlu kod kaedah seperti ini:
public void addItems (Senarai ArrayList)
Dalam kes ini, tanda tanya menunjukkan bahawa anda boleh mengetik sebarang jenis jenis di sini.
Itu hampir sama dengan warisan, tetapi bagaimana jika anda mahu sebenarnya mengehadkan parameter kepada koleksi superclass tertentu? Sebagai contoh, katakan anda sedang menjalankan sistem gaji yang mempunyai
Karyawan
superclass dengan dua subkelas yang dinamakan
HourlyEmployee
dan
SalariedEmployee
, dan anda mahu kaedah ini diterima objek
ArrayList
objek
Kakitangan
,
Setiap objekEmployee
, atau objek
SalariedEmployee
?
Dalam hal ini, anda boleh menambahkan klausul
memperpanjang
ke wildcard, seperti ini:
public addItems (ArrayList list)
Kaedah
addItems
dengan
ArrayList
jenis
Pekerja
,
HourlyEmployee
, atau
SalariedEmployee
.
Sekarang, sebelum anda memanggilnya sehari, ambil contoh ini satu langkah lagi: Katakan kaedah
addItems
ini muncul dalam kelas generik yang menggunakan parameter jenis formal
untuk menentukan jenis elemen yang kelas menerima, dan anda mahu kaedah
addItems
untuk menerima
ArrayList
jenis
E
atau mana-mana subclassnya. Untuk melakukan itu, anda akan mengisytiharkan kaedah
addItems
seperti ini:
public void addItems (senarai ArrayList)
Di sini parameter jenis wildcard
hanya bermakna bahawa
ArrayList < boleh menjadi jenis
E
dan mana-mana jenis yang memanjangkan
E
.