Java Generics (Có ví dụ)

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về Java Generics, cách tạo lớp và phương thức generics và những ưu điểm của nó với sự trợ giúp của các ví dụ.

Java Generics cho phép chúng ta tạo một lớp, giao diện và phương thức duy nhất có thể được sử dụng với các loại dữ liệu (đối tượng) khác nhau.

Điều này giúp chúng tôi sử dụng lại mã của mình.

Lưu ý : Generics không làm việc với các kiểu dữ liệu ( int, float, char, vv).

Lớp Java Generics

Chúng ta có thể tạo một lớp có thể được sử dụng với bất kỳ loại dữ liệu nào. Một lớp như vậy được gọi là Generics Class.

Đây là cách chúng ta có thể tạo một lớp generics trong Java:

Ví dụ: Tạo một Lớp Chung

 class Main ( public static void main(String() args) ( // initialize generic class // with Integer data GenericsClass intObj = new GenericsClass(5); System.out.println("Generic Class returns: " + intObj.getData()); // initialize generic class // with String data GenericsClass stringObj = new GenericsClass("Java Programming"); System.out.println("Generic Class returns: " + stringObj.getData()); ) ) // create a generics class class GenericsClass ( // variable of T type private T data; public GenericsClass(T data) ( this.data = data; ) // method that return T type variable public T getData() ( return this.data; ) )

Đầu ra

 Trả về Generic Class: 5 Trả về Generic Class: Lập trình Java

Trong ví dụ trên, chúng ta đã tạo một lớp chung có tên là GenericsClass. Lớp này có thể được sử dụng để làm việc với bất kỳ loại dữ liệu nào.

 class GenericsClass (… )

Ở đây, T được sử dụng bên trong dấu ngoặc nhọn cho biết tham số kiểu . Bên trong Mainlớp, chúng tôi đã tạo hai đối tượng của GenericsClass

  • intObj - Ở đây, tham số kiểu T được thay thế bằng Integer. Bây giờ, GenericsClass hoạt động với dữ liệu số nguyên.
  • stringObj - Ở đây, tham số kiểu T được thay thế bằng String. Bây giờ, GenericsClass hoạt động với dữ liệu chuỗi.

Phương pháp Java Generics

Tương tự như lớp generics, chúng ta cũng có thể tạo một phương thức có thể được sử dụng với bất kỳ loại dữ liệu nào. Một lớp như vậy được gọi là Phương pháp Chung.

Đây là cách chúng ta có thể tạo một lớp generics trong Java:

Ví dụ: Tạo một Phương pháp Chung

 class Main ( public static void main(String() args) ( // initialize the class with Integer data DemoClass demo = new DemoClass(); // generics method working with String demo.genericsMethod("Java Programming"); // generics method working with integer demo.genericsMethod(25); ) ) class DemoClass ( // creae a generics method public void genericsMethod(T data) ( System.out.println("Generics Method:"); System.out.println("Data Passed: " + data); ) )

Đầu ra

 Phương pháp chung: Dữ liệu được truyền: Phương pháp Chung lập trình Java: Dữ liệu được truyền: 25

Trong ví dụ trên, chúng ta đã tạo một phương thức chung có tên là genericsMethod.

 public void genericMethod(T data) (… )

Ở đây, tham số kiểu được chèn sau công cụ sửa đổi publicvà trước kiểu trả về void.

Chúng ta có thể gọi phương thức generics bằng cách đặt kiểu thực bên trong dấu ngoặc nhọn trước tên phương thức.

 demo.genericMethod("Java Programming"); demo.genericMethod(25);

Lưu ý : Chúng ta có thể gọi phương thức generics mà không bao gồm tham số kiểu. Ví dụ,

 demo.genericsMethod("Java Programming");

Trong trường hợp này, trình biên dịch có thể khớp với tham số kiểu dựa trên giá trị được truyền cho phương thức.

Các loại giới hạn

Nói chung, tham số kiểu có thể chấp nhận bất kỳ kiểu dữ liệu nào (ngoại trừ kiểu nguyên thủy).

Tuy nhiên, nếu chúng ta chỉ muốn sử dụng generic cho một số kiểu cụ thể (chẳng hạn như chấp nhận dữ liệu kiểu số), thì chúng ta có thể sử dụng các kiểu có giới hạn.

Trong trường hợp các loại ràng buộc, chúng tôi sử dụng extendstừ khóa. Ví dụ,

 

Điều này có nghĩa là T chỉ có thể chấp nhận dữ liệu là các kiểu con của A.

Ví dụ: Các loại giới hạn

 class GenericsClass ( public void display() ( System.out.println("This is a bounded type generics class."); ) ) class Main ( public static void main(String() args) ( // create an object of GenericsClass GenericsClass obj = new GenericsClass(); ) )

Trong ví dụ trên, chúng ta đã tạo một lớp có tên là GenericsClass. Chú ý biểu thức, chú ý biểu thức

  

Ở đây, GenericsClass được tạo với kiểu giới hạn. Điều này có nghĩa là GenericsClass chỉ có thể hoạt động với các kiểu dữ liệu là con của Number( Integer, Doublev.v.).

Tuy nhiên, chúng tôi đã tạo một đối tượng của lớp generics với String. Trong trường hợp này, chúng ta sẽ gặp lỗi sau.

GenericsClass obj = new GenericsClass (); reason: biến suy luận T có các ràng buộc bình đẳng giới hạn không tương thích: Chuỗi giới hạn dưới: Số trong đó T là biến kiểu: T kéo dài Số được khai báo trong lớp GenericsClass

Ưu điểm của Java Generics

1. Khả năng tái sử dụng mã

Với sự trợ giúp của generics trong Java, chúng ta có thể viết mã hoạt động với các loại dữ liệu khác nhau. Ví dụ,

 public void genericsMethod(T data) (… )

Ở đây, chúng tôi đã tạo ra một phương pháp chung. Phương pháp tương tự này có thể được sử dụng để thực hiện các hoạt động trên dữ liệu số nguyên, dữ liệu chuỗi, v.v.

2. Kiểm tra kiểu thời gian biên dịch

Các tham số kiểu của Generics cung cấp thông tin về các loại dữ liệu sử dụng trong mã generics. Ví dụ,

 // using Generics GenericsClass list = new GenericsClass();

Ở đây, chúng tôi biết rằng GenericsClass chỉ hoạt động với Integerdữ liệu.

Bây giờ, nếu chúng ta cố gắng truyền dữ liệu không phải là Integer vào lớp này, chương trình sẽ tạo ra lỗi tại thời điểm biên dịch.

3. Được sử dụng với Bộ sưu tập

Khung tập hợp sử dụng khái niệm generic trong Java. Ví dụ,

 // creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();

Trong ví dụ trên, chúng ta đã sử dụng cùng một lớp ArrayList để làm việc với các kiểu dữ liệu khác nhau.

Tương tự như ArrayList, các khoản thu khác ( LinkedList, Queue, Maps, và vân vân) cũng mang tính tổng quát trong Java.

thú vị bài viết...