Parametrik tiplerin önemli bir özelliği, polimorfik algoritmalar, yani parametre değerinden bağımsız olarak bir veri yapısı üzerinde çalışan algoritmalar yazma yeteneğidir Arrays.sort()
.
Jenerikler ile, bu joker karakterler ile yapılır:
<E extends Comparable<E>> void sort(E[]);
Gerçekten kullanışlı olması için, joker karakter türleri joker karakter yakalama gerektirir ve bu da bir tür parametresi kavramını gerektirir. Java'ya diziler eklendiğinde bunların hiçbiri mevcut değildi ve referans türü kovaryant yapım dizileri, polimorfik algoritmalara izin vermek için çok daha basit bir yola izin verdi:
void sort(Comparable[]);
Ancak, bu basitlik statik tip sistemde bir boşluk açtı:
String[] strings = {"hello"};
Object[] objects = strings;
objects[0] = 1; // throws ArrayStoreException
bir başvuru türü dizisine her yazma erişiminin çalışma zamanı denetimini gerektirir.
Özetle, jenerikler tarafından şekillendirilen daha yeni yaklaşım, tür sistemini daha karmaşık, ancak aynı zamanda daha statik tipte güvenli kılarken, daha eski yaklaşım daha basit ve daha az statik olarak tür güvenli. Dil tasarımcıları daha basit bir yaklaşımı tercih ettiler, tür sisteminde nadiren sorunlara neden olan küçük bir boşluk açmaktan daha önemli şeyler yaptılar. Daha sonra, Java kurulduğunda ve acil ihtiyaçlar karşılandığında, jenerikler için doğru yapmak için kaynaklara sahiptiler (ancak diziler için değiştirmek mevcut Java programlarını bozmuş olurdu).