"Vel, endelig - nok en liten leksjon om generiske legemidler."

"Nå skal jeg fortelle deg hvordan du kommer deg rundt type sletting."

"Ah. Det er noe jeg vil vite."

"Som du sikkert allerede vet, har Java en klassetype, som brukes til å lagre en referanse til et objekts klasse. "Her er noen eksempler:"

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

"Ah."

"Men det du sannsynligvis ikke vet er at det også finnes en generisk klasse kalt Class. Og generiske klassevariabler kan bare lagre referanser til typen bestemt av typeargumentet.  Her er noen eksempler:"

Eksempler
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

"Hvorfor fungerer det slik?"

"Vel, verdien av klassefeltet for Integer (dvs. Integer.class) er faktisk et Class<Integer>-objekt."

"Men la oss fortsette."

"Ved å dra nytte av det faktum at Klasse<T> - er en generisk og at denne typen variabel bare kan inneholde en verdi av type T, kan du sette dem sammen på en glatt måte som dette:"

Eksempel
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
 }
}
Bruk
Zoo<Tiger> zoo = new Zoo<Tiger>(Tiger.class); // This is where we pass the type!
Tiger tiger = zoo.createNewAnimal();

"Dette er ikke en veldig vanskelig manøver - vi sender rett og slett en referanse til ønsket type. Men hvis vi bare brukte Klasse i stedet for Klasse<T>, kan noen ved et uhell passere to forskjellige typer: en som T-argumentet , og en annen til konstruktøren."

"Ah. Jeg forstår. Det har ikke skjedd noe overnaturlig, men ikke noe forferdelig heller. Det er en referanse til typen, og du kan bruke den. Det fungerer og det er bra nok for meg."

"Gutten blir mann! "Det fungerer og det er bra nok for meg" er ofte det beste alternativet."

"Mange ting kan gjøres om i Java nå, men vi må opprettholde kompatibilitet med gammel kode."

"De titusenvis av populære polerte biblioteker er det kraftigste argumentet for Java i dag. Dermed forblir Java det mest populære språket ved å opprettholde bakoverkompatibilitet, så det kan ikke introdusere radikale innovasjoner."

"Vel, jeg skal bygge min egen Java med blackjack og..."

"Fint, jeg er allerede sliten fra dagen. Til neste gang."

"Farvel, Rishi, og takk for en så interessant leksjon."