"Well, sa wakas - isa pang maliit na aralin sa generics."

"Ngayon sasabihin ko sa iyo kung paano lumibot sa uri ng erasure."

"Ah. Yan ang gusto kong malaman."

"Tulad ng malamang na alam mo na, ang Java ay may uri ng Klase, na ginagamit upang mag-imbak ng reference sa klase ng isang bagay. "Narito ang ilang mga halimbawa:"

Mga halimbawa
Class clazz = Integer.class;
Class clazz = String.class;
Class clazz = "abc".getClass();

"Ah."

"Ngunit ang malamang na hindi mo alam ay mayroon ding generic na klase na tinatawag na Class. At ang mga generic na variable ng Klase ay maaari lamang mag-imbak ng mga sanggunian sa uri na tinutukoy ng uri ng argumento.  Narito ang ilang mga halimbawa:"

Mga halimbawa
Class<Integer> clazz1 = Integer.class; // Everything works well
Class<String> clazz2 = Integer.class; // Compilation error
Class<String> clazz1 = String.class; // Everything works well
Class<String> clazz2 = int.class; // Compilation error
Class<? extends String> clazz1 = "abc".getClass(); // Everything works well
Class<Object> clazz2 = "abc".getClass(); // Compilation error

"Bakit ito gumagana nang ganoon?"

"Well, ang value ng class field para sa Integer (ie Integer.class) ay talagang isang Class<Integer> object."

"Pero ituloy natin."

"Sinasamantala ang katotohanan na ang Class<T> — ay isang generic at ang ganitong uri ng variable ay maaari lamang magkaroon ng halaga ng uri T, maaari mong pagsama-samahin ang mga ito sa isang makinis na paraan tulad nito:"

Halimbawa
class Zoo<T>
{
 Class<T> clazz;
 ArrayList<T> animals = new ArrayList<T>

 Zoo(Class<T> clazz)
 {
  this.clazz = clazz;
 }

 public T createNewAnimal()
 {
  T animal = clazz.newInstance();
  animals.add(animal);
  return animal
 }
}
Paggamit
Zoo<Tiger> zoo = new Zoo<Tiger>(Tiger.class); // This is where we pass the type!
Tiger tiger = zoo.createNewAnimal();

"Ito ay hindi isang sobrang nakakalito na maniobra — nagpapasa lang kami ng reference sa gustong uri. Ngunit, kung ginamit lang namin ang Class sa halip na Class<T>, maaaring may isang tao na hindi sinasadyang makapasa ng dalawang magkaibang uri: ang isa bilang T argumento , at isa pa sa constructor."

"Ah. Naiintindihan ko. Wala namang supernatural na nangyari, pero wala rin namang kakila-kilabot. May reference sa type, and you can use it. It works and that's good enough for me."

"Ang batang lalaki ay nagiging isang lalaki! 'Ito ay gumagana at iyon ay sapat na mabuti para sa akin' ay madalas na ang pinakamahusay na pagpipilian."

"Maraming bagay ang maaaring gawing muli sa Java ngayon, ngunit kailangan nating mapanatili ang pagiging tugma sa lumang code."

"Ang sampu-sampung libong sikat na pinakintab na mga aklatan ay ang pinakamakapangyarihang argumento para sa Java ngayon. Kaya, ang Java ay nananatiling pinakasikat na wika sa pamamagitan ng pagpapanatili ng pabalik na pagkakatugma, kaya hindi nito maipakilala ang mga radikal na pagbabago."

"Buweno, gagawa ako ng sarili kong Java gamit ang blackjack at..."

"Fine, I'm already tired from the day. Hanggang sa susunod."

"Paalam, Rishi, at salamat sa isang kawili-wiling aralin."