Generics trong java.

Generics là một tính 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 sẽ cùng tìm hiểu về Generics trong Java.

1.Generics có quan trọng không và tại sao lại cần có Generics?

Mình xin trả lời là Generics có quan trọng.
Generics là một khái niệm được đưa vào Java từ phiên bản 5. Trước khi đưa ra khái niệm Generics là gì, chúng ta hãy xem một đoạn code của Java trước phiên bản 5.

Như bạn đã biết ArrayList là một danh sách, bạn có thể thêm, xóa, sửa và truy cập vào các phần tử của danh sách. Mình đã có 1 bài viết nói về ArrayList. Ai chưa hiểu thì có thể ấn vào đây để đọc.

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 kiểu Integer. Nhưng bởi vì list là một collection của đố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. Tại nơi nào đó trong chương trình bạn thêm vào danh sách này một phần tử không phải Integer. Khai báo sau sẽ hợp lệ:

Như bạn thấy, mình có thể thêm các phần tử kiểu Integer, String, Boolean. Tuy nhiên, khi bạn lấy ra các phần tử và ép kiểu về Integer, một ngoại lệ sẽ bị ném ra.

mình sẽ demo 1 ngoại lệ khi ép kiểu:

Kiểu dữ liệu của List là String, get phần tử 0 là kiểu String và có giá trị là “hello”, đương nhiên “hello” không thể nào ép kiểu sang int được.

Hoặc không cần đến lúc chạy trương trình, generics giúp bạn xác định kiểu dữ liệu ngay từ khi bạn khởi tạo.

Đó 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 có thể chỉ định kiểu dữ liệu mà chúng ta sẽ làm việc ngay thời điểm biên dịch (compile time).

2. Một số quy ước đặt tên kiểu tham số Generic

Đặt tên kiểu tham số là rất quan trọng để học Genericics. Nó không bắt buộc, tuy nhiên chúng ta nên đặt theo quy ước chung để dễ đọc, dễ bảo trì. Các kiểu tham số thông thường như sau:

  • E- Element (phần tử – được sử dụng phổ biến trong Collection Framework)
  • K – Key (khóa)
  • V – Value (giá trị)
  • N – Number (kiểu số: Integer, Double, Float, …)
  • T – Type (Kiểu dữ liệu bất kỳ thuộc Wrapper class: String, Integer, Long, Float, …)
  • S, U, V … – được sử dụng để đại diện cho các kiểu dữ liệu (Type) thứ 2, 3, 4, …

3. Ký tự Diamond <>

Trong Java 7 và các phiên bản sau, bạn có thể thay thế các đối số kiểu dữ liệu cần thiết để gọi hàm khởi tạo (constructor) của một lớp Generic bằng cặp dấu <>. Trình biên dịch sẽ xác định hoặc suy ra các kiểu dữ liệu từ ngữ cảnh sử dụng.

Ví dụ, bạn có thể tạo một list <Integer> với câu lệnh sau:

Để biết thêm thông tin về ký hiệu <>, bạn xem thêm trên trang document của Oracle.

Thôi muộn rồi đi ngủ, mai viết tiếp. Ai nỡ đọc được đến đây rồi thì mai quay lại tìm hiểu tiếp với mình nha 😀

Đăng bởi Đào Văn Đô

Công chúa chỉ hôn con ếch khi biết chắc nó sẽ biến thành hoàng tử, người đẹp chỉ sống với quái vật khi rõ ràng anh ấy vốn là đại gia. Cuộc sống vốn dĩ là vậy, cách người ta đối xử với mình còn tuỳ thuộc xem mình là ai.

Bình luận về bài viết này

Tạo trang giống vầy với WordPress.com
Hãy bắt đầu