Sự khác biệt ở đây là trong lần đầu tiên, chúng tôi chỉ định rằng người gọi phải chuyển một cá thể Đối tượng (bất kỳ lớp nào) và nó sẽ nhận lại một Đối tượng khác (bất kỳ lớp nào, không nhất thiết phải cùng loại).
Trong lần thứ hai, kiểu được trả về sẽ cùng kiểu với kiểu đã cho khi lớp được định nghĩa.
Example ex = new Example<Integer>();
Ở đây chúng tôi chỉ định kiểu T sẽ là gì, cho phép chúng tôi thực thi nhiều ràng buộc hơn trên một lớp hoặc phương thức. Ví dụ, chúng ta có thể khởi tạo một LinkedList<Integer>
hoặc LinkedList<Example>
và chúng ta biết rằng khi chúng ta gọi một trong các phương thức này, chúng ta sẽ nhận lại một cá thể Số nguyên hoặc Ví dụ.
Mục tiêu chính ở đây là mã gọi có thể chỉ định loại đối tượng nào mà một lớp sẽ hoạt động, thay vì dựa vào kiểu ép kiểu để thực thi điều này.
Xem Java Generics * từ Oracle.
* Liên kết cập nhật.