Một tính năng quan trọng của các loại tham số là khả năng viết các thuật toán đa hình, tức là các thuật toán hoạt động trên cấu trúc dữ liệu bất kể giá trị tham số của nó, chẳng hạn như Arrays.sort()
.
Với thuốc generic, điều đó được thực hiện với các loại ký tự đại diện:
<E extends Comparable<E>> void sort(E[]);
Để thực sự hữu ích, các loại ký tự đại diện yêu cầu chụp ký tự đại diện và điều đó đòi hỏi phải có khái niệm về một tham số loại. Không có cái nào có sẵn tại các mảng thời gian được thêm vào Java và việc tạo các mảng của kiểu tham chiếu kiểu tham chiếu cho phép một cách đơn giản hơn nhiều để cho phép các thuật toán đa hình:
void sort(Comparable[]);
Tuy nhiên, sự đơn giản đó đã mở một lỗ hổng trong hệ thống kiểu tĩnh:
String[] strings = {"hello"};
Object[] objects = strings;
objects[0] = 1; // throws ArrayStoreException
yêu cầu kiểm tra thời gian chạy của mọi truy cập ghi vào một mảng kiểu tham chiếu.
Tóm lại, cách tiếp cận mới hơn được thể hiện bằng khái quát làm cho hệ thống loại phức tạp hơn, nhưng cũng an toàn hơn về mặt tĩnh, trong khi cách tiếp cận cũ đơn giản hơn và loại an toàn tĩnh hơn. Các nhà thiết kế ngôn ngữ đã chọn cách tiếp cận đơn giản hơn, có nhiều việc quan trọng hơn là đóng một lỗ hổng nhỏ trong hệ thống loại hiếm khi gây ra vấn đề. Sau này, khi Java được thiết lập và các nhu cầu cấp thiết được quan tâm, họ có tài nguyên để thực hiện đúng cho các tổng quát (nhưng thay đổi nó thành các mảng sẽ phá vỡ các chương trình Java hiện có).