„Е, най-накрая – още един малък урок за генеричните лекарства.“

„Сега ще ви кажа How да заобиколите изтриването на типа.“

"Ах. Това е нещо, което искам да знам."

"Както вероятно вече знаете, Java има тип Class, който се използва за съхраняване на препратка към клас на обект. "Ето няколко примера:"

Примери
Class clazz = Integer.class;
Class clazz = String.class;
Class clazz = "abc".getClass();

"Ах."

„Но това, което вероятно не знаете, е, че има и общ клас, наречен Class. И общите променливи на класа могат да съхраняват само препратки към типа, определен от аргумента тип.  Ето няколко примера:“

Примери
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

"Защо работи така?"

„Е, стойността на полето клас за Integer (т.е. Integer.class) всъщност е Class<Integer> обект.“

— Но да продължим.

„Възползвайки се от факта, че Class<T> — е генеричен и че този тип променлива може да съдържа само стойност от тип T, можете да ги съберете заедно по изящен начин като този:“

Пример
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
 }
}
Използване
Zoo<Tiger> zoo = new Zoo<Tiger>(Tiger.class); // This is where we pass the type!
Tiger tiger = zoo.createNewAnimal();

„Това не е супер сложна маневра – ние просто предаваме препратка към желания тип. Но ако просто използваме Class instead of Class<T>, тогава някой може случайно да предаде два различни типа: единият като T аргумент , а друга към конструктора."

„Ах. Разбирам. Нищо свръхестествено не се е случило, но и нищо ужасно. Има препратка към типа и можете да я използвате. Работи и това е достатъчно добро за мен.“

„Момчето става мъж! „Работи и това е достатъчно добро за мен“ често е най-добрият вариант.“

„Много неща могат да бъдат преработени в Java сега, но трябва да поддържаме съвместимост със стария code.“

„Десетките хиляди популярни полирани библиотеки са най-мощният аргумент за Java днес. По този начин Java остава най-популярният език, като поддържа обратна съвместимост, така че не може да въведе радикални иновации.“

„Е, ще създам моя собствена Java с блекджек и…“

„Добре, вече съм уморен от деня. До следващия път.“

„Довиждане, Риши, и благодаря за толкова интересния урок.“