"Nou, eindelijk - nog een kleine les over generieke geneesmiddelen."

'Nu ga ik je vertellen hoe je het wissen van letters kunt omzeilen.'

"Ah. Dat is iets wat ik wil weten."

"Zoals u waarschijnlijk al weet, heeft Java een klassetype, dat wordt gebruikt om een ​​verwijzing naar de klasse van een object op te slaan. "Hier zijn enkele voorbeelden:"

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

"Ah."

"Maar wat je waarschijnlijk niet weet, is dat er ook een generieke klasse is genaamd Class. En generieke Class-variabelen kunnen alleen verwijzingen opslaan naar het type dat wordt bepaald door het type-argument.  Hier zijn enkele voorbeelden:"

Voorbeelden
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

"Waarom werkt het zo?"

"Nou, de waarde van het klasseveld voor Integer (dwz Integer.class) is eigenlijk een Class<Integer>-object."

"Maar laten we doorgaan."

"Profiteren van het feit dat Class<T> — een generieke variabele is en dat dit type variabele alleen een waarde van type T kan bevatten, kun je ze op een gelikte manier als volgt samenstellen:"

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

"Dit is geen super lastige manoeuvre - we geven gewoon een verwijzing door naar het gewenste type. Maar als we gewoon Class zouden gebruiken in plaats van Class<T>, dan zou iemand per ongeluk twee verschillende typen kunnen doorgeven: één als het T-argument , en nog een voor de constructor."

"Ah. Ik begrijp het. Er is niets bovennatuurlijks gebeurd, maar ook niets verschrikkelijks. Er is een verwijzing naar het type en je kunt het gebruiken. Het werkt en dat is goed genoeg voor mij."

"De jongen wordt een man! 'Het werkt en dat is goed genoeg voor mij' is vaak de beste optie."

"Veel dingen kunnen nu in Java opnieuw worden gedaan, maar we moeten de compatibiliteit met oude code behouden."

"De tienduizenden populaire gepolijste bibliotheken zijn tegenwoordig het krachtigste argument voor Java. Java blijft dus de meest populaire taal door achterwaartse compatibiliteit te behouden, dus het kan geen radicale innovaties introduceren."

"Nou, ik ga mijn eigen Java bouwen met blackjack en..."

"Prima, ik ben al moe van de dag. Tot de volgende keer."

"Tot ziens, Rishi, en bedankt voor zo'n interessante les."