"Eh, sonunda - jenerikler hakkında küçük bir ders daha."

"Şimdi size tip silmeyi nasıl aşacağınızı anlatacağım."

"Ah. Bu bilmek istediğim bir şey."

"Muhtemelen zaten bildiğiniz gibi, Java'nın bir nesnenin sınıfına referans depolamak için kullanılan bir Class türü vardır. "İşte bazı örnekler:"

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

"Ah."

"Ama muhtemelen bilmediğiniz şey, Class adında genel bir sınıf olduğudur. Ve genel Class değişkenleri, yalnızca type argümanı tarafından belirlenen türe yapılan başvuruları saklayabilir.  İşte bazı örnekler:"

örnekler
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

"Neden böyle çalışıyor?"

"Tamsayı için sınıf alanının değeri (yani Tamsayı.sınıf) aslında bir Class<Tamsayı> nesnesidir."

"Ama devam edelim."

"Class<T> —'nin bir jenerik olması ve bu değişken türünün yalnızca T türünde bir değer tutabilmesi gerçeğinden yararlanarak, bunları şu şekilde düzgün bir şekilde bir araya getirebilirsiniz:"

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

"Bu çok zor bir manevra değil - sadece istenen türe bir referans iletiyoruz. Ancak, Class<T> yerine Class'ı kullanırsak, o zaman birisi yanlışlıkla iki farklı türü geçebilir: biri T argümanı olarak ve bir diğeri de yapıcıya."

"Ah. Anlıyorum. Doğaüstü bir şey olmadı ama korkunç bir şey de olmadı. Tipe gönderme var ve onu kullanabilirsin. İşe yarıyor ve bu benim için yeterince iyi."

"Oğlan bir erkek oluyor! 'İşe yarıyor ve bu benim için yeterince iyi' çoğu zaman en iyi seçenek."

"Java'da artık pek çok şey yeniden yapılabilir, ancak eski kodla uyumluluğu korumamız gerekiyor."

"Onbinlerce popüler cilalanmış kitaplık, bugün Java için en güçlü argümandır. Bu nedenle Java, geriye dönük uyumluluğu koruyarak en popüler dil olmaya devam ediyor, bu nedenle radikal yenilikler getiremez."

"Pekala, blackjack ile kendi Java'mı yapacağım ve..."

"İyi, zaten günün yorgunuyum. Bir dahaki sefere kadar."

"Hoşça kal Rishi ve böylesine ilginç bir ders için teşekkürler."