"Hai! Aku arep nerusake pelajaran Ellie babagan generik. Siap ngrungokake?"

"Ya."

"Banjur ayo miwiti."

"Sing pisanan sampeyan kudu ngerti yaiku metode kelas uga bisa duwe parameter jinis dhewe."

"Aku ngerti."

"Ora, aku khusus tegese paramèter jinis dhewe: "

Tuladha
class Calculator
{
  T add(T a, T b); // Add
  T sub(T a, T b); // Subtract
  T mul(T a, T b); // Multiply
  T div(T a, T b); // Divide
}

"Parameter jinis iki khusus kanggo metode. Kelas ora duwe paramèter. Sampeyan bisa malah nyatakake cara iki statis lan nelpon tanpa obyek."

"Aku weruh. Titik saka paramèter jinis ing cara padha kanggo kelas?"

"Iya. Nanging ana sing anyar."

"Sampeyan wis ngerti, sampeyan bisa nggunakake wildcard ing deklarasi jinis. Banjur mbayangno kahanan ing ngisor iki:"

Tuladha 1
public void doSomething(List<? extends MyClass> list)
{
 for(MyClass object : list)
 {
  System.out.println(object.getState()); // Everything works well here.
 }
}

"Nanging yen kita pengin nambah item anyar menyang koleksi:"

Tuladha 2
public void doSomething(List<? extends MyClass> list)
{
 list.add(new MyClass()); // Error!
}

"Masalah iku ing kasus umum cara doSomething bisa liwati List kang unsur ora obyek MyClass, nanging obyek sembarang subclass saka MyClass. Nanging sampeyan ora bisa nambah obyek MyClass kanggo dhaftar kuwi!"

"Ah. Dadi, apa sing bisa ditindakake?"

"Ora ana apa-apa. Ing kahanan iki, sampeyan ora bisa nindakake apa-apa. Nanging iki menehi pangripta Jawa soko kanggo mikir bab. Lan padha teka karo tembung kunci anyar: super ."

"Sintaks katon meh padha:"

List<? super MyClass> list

Nanging ana bedane penting antarane ngluwihi lan super.

"«? ngluwihi T» tegese kelas kudu turunan saka T."

"«? super T» tegese kelas kudu leluhur saka T."

"Moly Suci. Dadi ing ngendi iki digunakake?"

"«? super T» digunakake nalika cara melu nambah koleksi obyek T. Ing kasus iki, bisa dadi koleksi obyek T utawa leluhur T.

"Ah. Objek AT bisa ditugasake menyang variabel referensi sing jinise yaiku salah sawijining leluhur T"

"Sajujure, pendekatan iki ora asring digunakake. Apa maneh, ana kekurangan. Contone: "

Tuladha
public void doSomething(List<? super MyClass> list)
{
 for(MyClass object : list) // Error!
 {
  System.out.println(object.getState());
 }
}
public void doSomething(List<? super MyClass> list)
{
 list.add(new MyClass()); // Everything works well here.
}

"Saiki conto pisanan ora bisa."

"Amarga dhaptar bisa uga dadi List<Object> (Obyek minangka kelas paling dhuwur MyClass), mula kita nulis kode sing ora bener:

Tuladha 1
List<Object> list;

for(MyClass object : list) // Error!
{
 System.out.println(object.getState());
}

"Aku weruh. Thanks kanggo pawulangan menarik."

"Sampeyan bisa."