"Saiki kanggo topik anyar sing menarik: wildcards."

"Intine, iki kaya pola «*» sing cocog karo apa wae.

"Nanging ayo miwiti saka wiwitan."

"Bayangake yen sampeyan duwe kelas Warrior lan metode sing nemtokake endi saka rong prajurit sing luwih kuwat. Mangkene carane iki katon: "

Tuladha 1
class WarriorManager
{
 public static boolean fight(Warrior w1, Warrior w2)
 {
  return w1.power > w2.power;
 }
}
Tuladha cara nelpon
MagicWarrior mag = new MagicWarrior();
ArcherWarrior archer = new ArcherWarrior();

boolean isMagicCooler = WarriorManager.fight(mag, archer);

"MagicWarrior lan ArcherWarrior loro-lorone marisi Warrior. ."

"Iku sethitik simplistic, nanging contone, iku bakal nindakake."

"Oke."

"Saiki umpamane sampeyan wis mutusake nggawe cara sing padha kanggo kahanan ing ngendi akeh prajurit sing melu perang."

Tuladha 1
class WarriorManager
{
 public static boolean fight(Warrior w1, Warrior w2)
 {
  return w1.power > w2.power;
 }

 public static boolean fight(List<Warrior> w1, List<Warrior> w2)
 {
  return 
 }
}
Tuladha cara nelpon
ArrayList<MagicWarrior> magi = new ArrayList<MagicWarrior>();
for(int i = 0; i < 10; i++)
 magi.add(new MagicWarrior());

ArrayList<ArcherWarrior> archers = new ArrayList<ArcherWarrior>();
for(int i = 0; i < 10; i++)
 archers.add(new ArcherWarrior());

boolean isMagicCooler = WarriorManager.fight(magi, archers); // Compilation error!

"Nanging ing kene sampeyan nemoni kesalahan kompilasi lan bingung apa sing salah."

"Iku yen MagicWarrior entuk warisan Warrior , lan obyek MagicWarrior bisa diterusake menyang metode perang (Warrior, Warrior).

"Nanging List<MagicWarior> ora marisi List<Warrior> . Dadi, sampeyan ora bisa ngliwati ing kono!"

"Maksudmu iku ora oleh warisan?"

"Maksudku iki: siji Dhaptar lan liyane Dhaptar, nanging padha duwe parameter jinis."

"Sampeyan bener. Aku kaya ora langsung weruh. Dadi, apa wis ana solusi kanggo masalah iki?"

"Ya. Sampeyan kudu nggunakake struktur sing luwih rumit. Iki katon:"

Tuladha 1
class WarriorManager
{
 public static boolean fight(Warrior w1, Warrior w2)
 {
  return w1.power > w2.power;
 }

 public static boolean fight(List<? extends Warrior> w1, List<? extends Warrior> w2)
 {
  return …
 }
}

"The «? ngluwihi Warrior» bagean tegese «sembarang jinis sing marisi Warrior»"

"Ing tembung liyane, saiki sampeyan bisa ngliwati List<MagicWarrior> lan List<ArcherWarrior>, lan kabeh bakal bisa digunakake."

"Sing apik tenan. Kurang masalah kaya ngono, luwih apik."

"Semono uga aku rumangsa."

"Nanging apa yen aku ora perlu soko sing marisi Warrior? Apa yen aku pengin bisa kanggo pass sembarang List karo parameter jinis sembarang kanggo cara? Apa sing diijini?"

"Ya, ana rong wujud notasi kanggo nindakake iku:"

List<? extends Object>
List<?>

"Kekarone tegese padha, mula versi kapindho biasane digunakake."

"Iku kabeh kanggo dina iki."

"Matur nuwun, Ellie. Aku pancene sinau akeh dina iki."