Generics trong Java

Generics là một chức năng của Java giúp cho lập trình viên có thể chỉ định rõ kiểu dữ liệu mà họ muốn làm việc với một class, một interface hay một phương thức nào đó. Trong bài viết này, chúng ta hãy cùng tìm hiểu thêm về generics trong Java các bạn nhé!

Tại sao lại cần generics?

Trước khi generics được giới thiệu, chúng ta chỉ làm việc với class, interface hay phương thức với một kiểu dữ liệu cố định.

Ví dụ, chúng ta khai báo một đối tượng List như sau:

Với khai báo trên, giả định rằng chúng ta mong muốn chỉ làm việc với đối tượng String. Nhưng bởi vì biến l là một Collection của những đối tượng Object nên chúng ta có thể sử dụng nó với bất kỳ kiểu dữ liệu nào. Khai báo sau sẽ hợp lệ:

Điều này sẽ gây nhập nhằng kiểu dữ liệu mà chúng ta muốn làm việc và đôi khi chúng ta cũng không kiểm soát được hết ở thời điểm compile time.

Đó là nguyên nhân của sự cần thiết phải có của generics trong Java. Với generics, chúng ta sẽ chỉ định kiểu dữ liệu mà chúng ta sẽ làm việc ngay thời điểm compile time luôn.

Ví dụ trên có thể viết lại như sau:

khi đó, khai báo sau sẽ báo lỗi ngay:



Cách tạo một generics class trong Java

Đầu tiên, các bạn hãy cùng mình định nghĩa một non-generics class trước rồi sau đó sẽ chuyển class này qua generics class nhé!

Nội dung của non-generics class như sau:

Với định nghĩa như thế này, thuộc tính obj của đối tượng Student và tham số obj trong phương thức set() có thể là bất kỳ đối tượng nào. Và nếu 2 đối tượng này là khác nhau, một exception sẽ xảy ra ngay.

Để cố định kiểu dữ liệu cho thuộc tính obj và cả trong phương thức set(), chúng ta sẽ áp dụng generics trong Java. Cụ thể như sau:



Sử dụng generics class

Để sử dụng generics class, khi khởi tạo đối tượng, chúng ta sẽ truyền kiểu dữ liệu mà chúng ta muốn vào đối tượng đó.

Lấy ví dụ Student bên trên, chúng ta có thể khởi tạo đối tượng Student cùng với kiểu dữ liệu String như sau:

Lúc này, chúng ta không thể sử dụng phương thức set() với kiểu dữ liệu khác String, ví dụ:

Generics trong Java

2 thoughts on “Generics trong Java

  1. hi , mình đang tìm kiếm tài liệu thì mình đã đọc được cmt của bạn . không biết đến thời điểm này bạn đã giải đáp được thắc mắc chưa , nhưng mình vẫn sẽ giải thích theo ý của mình cho bạn , T ở đây nó giống như Type , khi bạn khởi tạo đối tượng bất kì Object thì T ở đây là kiểu dữ liệu được sử dụng vào mục đích gì đó trong class , như ví dụ trên thì nó là định nghĩa kiểu dữ liệu cho thuộc tính obj , nghĩa là nếu bạn Khai báo Student thì khi bạn get() nó sẽ trả về int , tương ứng với String , Boolean , Double …… Mục đích của nó là làm cho nó động , chứ không như những class thông thường bạn sẽ khai báo mặc định kiểu dữ liệu . hivong tui có thể giúp j đó cho bạn, xin lỗi về những gì sai trong trình bày , cảm ơn vì đã lắng nghe !

  2. public T(t nay la nhu nao em chua hieu) toModel(Class tclass) {
    return null;
    }
    giai thich giup minh y nghia cua chu T minh danh dau phia tren ?

Add Comment