"Nå, endelig - endnu en lille lektion om generiske lægemidler."

"Nu vil jeg fortælle dig, hvordan du kommer uden om typesletning."

"Ah. Det er noget, jeg gerne vil vide."

"Som du sikkert allerede ved, har Java en klassetype, som bruges til at gemme en reference til et objekts klasse. "Her er nogle eksempler:"

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

"Ah."

"Men hvad du sikkert ikke ved er, at der også er en generisk klasse kaldet Class. Og generiske klassevariabler kan kun gemme referencer til typen bestemt af typeargumentet.  Her er nogle 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 sådan?"

"Nå, værdien af ​​klassefeltet for Integer (dvs. Integer.class) er faktisk et Class<Integer>-objekt."

"Men lad os fortsætte."

"Ved at udnytte det faktum, at Klasse<T> - er en generisk, og at denne type variabel kun kan indeholde en værdi af type T, kan du sætte dem sammen på en glat måde som denne:"

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

"Dette er ikke en super vanskelig manøvre - vi sender simpelthen en reference til den ønskede type. Men hvis vi blot brugte Klasse i stedet for Klasse<T>, kan nogen ved et uheld sende to forskellige typer: en som T-argumentet , og en anden til konstruktøren."

"Ah. Jeg forstår det. Der er ikke sket noget overnaturligt, men heller ikke noget forfærdeligt. Der er en reference til typen, og du kan bruge den. Det virker, og det er godt nok for mig."

"Drengen bliver en mand! 'Det virker, og det er godt nok for mig' er ofte den bedste mulighed."

"Mange ting kunne laves om i Java nu, men vi skal bevare kompatibiliteten med gammel kode."

"De titusindvis af populære polerede biblioteker er det mest kraftfulde argument for Java i dag. Således forbliver Java det mest populære sprog ved at opretholde bagudkompatibilitet, så det kan ikke introducere radikale innovationer."

"Nå, jeg har tænkt mig at bygge min egen Java med blackjack og..."

"Okay, jeg er allerede træt fra dagen. Indtil næste gang."

"Farvel, Rishi, og tak for sådan en interessant lektion."