Fitur penting dari tipe parametrik adalah kemampuan untuk menulis algoritma polimorfik, yaitu algoritma yang beroperasi pada struktur data terlepas dari nilai parameternya, seperti Arrays.sort()
.
Dengan obat generik, itu dilakukan dengan tipe wildcard:
<E extends Comparable<E>> void sort(E[]);
Agar benar-benar bermanfaat, tipe wildcard memerlukan penangkapan wildcard, dan itu memerlukan gagasan tentang parameter tipe. Tidak ada yang tersedia pada saat array ditambahkan ke Jawa, dan membuat array tipe referensi kovarian memungkinkan cara yang jauh lebih sederhana untuk mengizinkan algoritma polimorfik:
void sort(Comparable[]);
Namun, kesederhanaan itu membuka celah pada sistem tipe statis:
String[] strings = {"hello"};
Object[] objects = strings;
objects[0] = 1; // throws ArrayStoreException
membutuhkan pemeriksaan runtime dari setiap akses tulis ke berbagai jenis referensi.
Singkatnya, pendekatan yang lebih baru yang diwujudkan oleh obat generik membuat sistem tipe lebih kompleks, tetapi juga tipe yang lebih aman, sedangkan pendekatan yang lebih lama lebih sederhana, dan tipe yang kurang aman secara statis. Para perancang bahasa memilih untuk pendekatan yang lebih sederhana, memiliki hal-hal yang lebih penting untuk dilakukan daripada menutup celah kecil dalam sistem tipe yang jarang menyebabkan masalah. Kemudian, ketika Java didirikan, dan kebutuhan mendesak diatasi, mereka memiliki sumber daya untuk melakukannya dengan benar untuk generik (tetapi mengubahnya untuk array akan merusak program Java yang ada).