Hôm nay bản thân sẽ ra mắt tới các bạnnhững điểm sáng cơ bạn dạng của generic, bí quyết tạo class generic, cách khởi sinh sản phương thức, đối tượng người dùng và mảng trong generic. Generic rất hữu ích trong việc kiểm soát kiểu dữ liệu, vậy nó là gì?

Generics là gì?

Khái niệm generics được gửi vào tính từ lúc java 5.

Bạn đang xem: Generic

Thuật ngữ “generics” được đọc là thông số hóa vẻ bên ngoài dữ liệu. Vấn đề tham số hóa kiểu dữ liệu giúp cho lập trình viên rất có thể dễ bắt lỗi các kiểu tài liệu không phù hợp lệ, bên cạnh đó giúp dễ dãi hơn cho bài toán tạo với sử dụng những class, interface, method với rất nhiều kiểu tài liệu khác nhau.

Chúng ta đang mượn lớp ArrayList() làm ví dụ:

*

Khi khai báo lớp ArrayList() bọn họ thường gắn kiểu tài liệu vào vệt , để phép tắc kiểu dữ liệu của Lớp ArrayList() đó.

Sau khi khai báo ArrayList() ở loại Integer thì các phần tử trong ArrayList() chỉ có thể nhận vẻ bên ngoài Integer.

Ta cũng rất có thể đổi Integer thành các kiểu khác ví như Double, String, … mà không nhất thiết phải viết lại cả 1 class cho một kiểu khác. Bài toán này giúp việc tái sự dụng lại với Kiểu dữ liệu khác dễ ợt hơn cùng cũng không cần thiết phải viết thêm 1 class new để giải pháp xử lý kiểu tài liệu khác.

*

Đây là ngôi trường hợp họ phải tạo nhiều class nhằm xử lý các kiểu tài liệu khác nhau.

*

Một số quy cầu trong generics

Có khôn xiết nhiều cách để đặt tên mang đến kiểu tham số trong Generic nhưng họ nên tuân theo nhưng kiểu đặt tên tiêu chuẩn để sau này nếu có làm việc nhóm thì team đang dễ đọc code hơn.

Các hình dạng tham số thông thường:

T - Type (Kiểu dữ liệu ngẫu nhiên thuộc Wrapper class: String, Integer, Long, Float, …)E – Element (phần tử – được sử dụng thông dụng trong Collection Framework)K – Key (khóa)V – Value (giá trị)N – Number (kiểu số: Integer, Double, Float, …)U,S,I,G, … (tùy theo kiểu của người tiêu dùng đặt)

Các loại Generic

1. Sản xuất class Generic với phong cách tham số generic

Dictionary là một class Generics nó chứa một cặp khóa và quý hiếm (key/ value).

class Dictionary private K key; private V value; public Dictionary(K key, V value) this.key = key; this.value = value; public K getKey() return key; public void setKey(K key) this.key = key; public V getValue() return value; public void setValue(V value) this.value = value; K cùng V được gọi là 1 trong những kiểu tham số chiếu nào đó của Dictionary. Khi áp dụng class này bọn họ phải xác định 1 vẻ bên ngoài tham số gắng thể.

public class DemoGeneric public static void main(String<> args) Dictionary d = new Dictionary("Study", "hoc"); String english = d.getKey(); String vietnamese = d.getValue(); System.out.println(english + ": " + vietnamese); //Ouput: Study: hoc 2. Thừa kế lớp GenericsMột class không ngừng mở rộng từ một class Generics, nó có thể quy định kiểu mang lại tham số Generics, giữ nguyên các thông số Generics hoặc thêm những tham số Generics.

2.1. Phương pháp quy định kiểu mang đến tham số Generics.

Chúng ta tái sử dụng class Dictionary.

class Book extends Dictionary public Book(String key, String value) super(key, value); public class thử nghiệm public static void main(String<> args) Book l = new Book("Study", "hoc"); String english = l.getKey(); String vietnamese = l.getValue(); System.out.println(english + ": " + vietnamese); // Ouput: Study: hoc 2.2. Biện pháp quy định giữ nguyên các thông số generic.

class Book extends Dictionary public Book(K key, V value) super(key, value); public class test public static void main(String<> args) Book l = new Book("Study", "hoc"); String english = l.getKey(); String vietnamese = l.getValue(); System.out.println(english + ": " + vietnamese); // Ouput: Study: hoc Note: Chúng ta có thể vừa điều khoản trước 1 kiểu ví dụ vừa không thay đổi tham số generic

class Book extends Dictionary public Book(String key, V value) super(key, value); public class demo public static void main(String<> args) Book l = new Book("Study", "hoc"); String english = l.getKey(); String vietnamese = l.getValue(); System.out.println(english + ": " + vietnamese); // Ouput: Study: hoc 2.3. Biện pháp thêm những tham số Generics vào 1 Class generic khác.

tạo 1 class bé kế thừa Dictionary sau đó thêm tham số I vào

class Book extends Dictionary private I info; // khởi sản xuất thêm thông số generic public Book(K key, V value) super(key, value); public Book(K key, V value, I info) super(key, value); this.info = info; // truyền loại generic bắt đầu vào public I getInfo() return info; public void setInfo(I info) this.info = info; public class chạy thử public static void main(String<> args) Book l = new Book("Study", "hoc", 123); String english = l.getKey(); String vietnamese = l.getValue(); int quanity = l.getInfo(); System.out.println(english + ": " + vietnamese + " Quantity: " + quanity); // Ouput: // Study: hoc // Quanity: 123 3, Generics InterfaceChúng ta khởi tạo nên 1 interface tiếp đến để 1 class implements lên là họ đã rất có thể sử dụng.

interface writer void update(T obj); void delete(T obj); void write(T obj);class Book implements writer
Override public void write(T obj) // vị something public class test public static void main(String<> args) Book t = new Book(); t.write("Add data to book");

Các thao tác trên Generic

1. Khởi tạo cách thức genericclass Store // Arraylist sẽ đựng các phần tử E // ta sẽ trả về phần tử đầu chi phí trong arr khi được gọi public static E getFirstElement(ArrayList arr) if (arr.isEmpty()) return null; E first = arr.get(0); return first; public class kiểm tra public static void main(String<> args) ArrayList danh mục = new ArrayList(); list.add("fkhorizont-turnovo.com"); list.add("Google.com"); list.add("Azure"); list.add("GCF"); System.out.println(Store.getFirstElement(list)); // output: fkhorizont-turnovo.com 2. Khởi tạo đối tượng người sử dụng GenericChúng ta ko được phép khởi sinh sản đối tương obj theo kiểu này.

T obj = new T(); // errorVì lúc khởi sản xuất không hề tồn trên ở thời điểm java khởi chạy. Nó chỉ có chân thành và ý nghĩa với trình biên dịch kiểm soát và điều hành code của fan lập trình. Số đông kiểu phần đông là Object tại thời gian chạy của Java.

package Generics;class fkhorizont-turnovo.com public fkhorizont-turnovo.com() public void sayHi() System.out.println("chúc chúng ta học tốt!"); class MyGeneric private T obj; // khởi tạo đối tượng lưu thông số generic public MyGeneric(Class classObject) throws InstantiationException, IllegalAccessException // lấy tên Class với gán nó vào đối tượng người sử dụng obj this.obj = (T) classObject.newInstance(); public T getObj() return obj; // trả về obj public class chạy thử public static void main(String<> args) throws InstantiationException, IllegalAccessException // khởi tạo đối tượng người tiêu dùng fkhorizont-turnovo.com trên myObj MyGeneric myObj = new MyGeneric(fkhorizont-turnovo.com.class); // hiện nay myObj vẫn có đối tượng người sử dụng fkhorizont-turnovo.com // t chỉ việc gọi đối tượng người dùng đó ra bằng method getObj() myObj.getObj().sayHi(); Output:

*

3, Khởi chế tạo ra mảng Mảng Generic

Cũng tương tự như tạo đối tượng người tiêu dùng generic chúng ta không thể tạo theo phong cách thông thường, nhưng chúng ta cũng có thể khai báo nó 1 cách bình thường.

T obj<> = new T<5>; // errorT obj<>; // okĐể khởi chế tạo mảng trình biên dịch của Java cần biết rõ là đồ vật gi mới rất có thể biên dịch (compile) new T<5>. Nếu như không biết rõ nó mang định coi là Object.

Các khởi tạo thành mảng cũng như như khi chế tạo đối tượng.

class MyArrayGeneric private T<> array; // khởi chế tác mảng public MyArrayGeneric(T<> array) this.array = array; public T<> getArray() return array; public T getFirstElement() if (this.array.length == 0) return null; return this.array<0>; public T getLastElement() if (this.array.length == 0) return null; return this.array; public class chạy thử public static void main(String<> args) String<> names = new String<> "Dat", "Khoa", "Tin" ; // truyền array names vào vào MyArrayGeneric nhằm gắn mảng vào trong nó MyArrayGeneric myArrayGeneric = new MyArrayGeneric(names); // ta có thể dổi thành các kiểu khác như Double, Integer, ... System.out.println("First name: " + myArrayGeneric.getFirstElement()); System.out.println("Last name: " + myArrayGeneric.getLastElement());

Generics với ký kết tự đại diện Generic method (wildcard):

Trong Generic, dấu chấm hỏi (?) được hotline là một đại diện thay mặt (wildcard), nó là thứ hạng không xác định.

Wildcard có thể được sử dụng cho rất nhiều tính huống ví như kiểu tham số, ngôi trường hoặc thay đổi cục bộ; nhiều khi là một hình dáng trả về.

Tùy vào ví trí của Wildcard nhưng mà nó sẽ có được những ý nghĩa sâu sắc khác nhau:

Collection: trình bày một tập hợp đồng ý tất cả những loại đối số (chứa phần đông kiểu đối tượng).List: miêu tả một danh sách, vị trí mà các bộ phận là mẫu mã Number hoặc kiểu bé của Number.Comparator: diễn tả một bộ đối chiếu (Comparator) mà thông số phải là String hoặc thân phụ của String.

Xem thêm: Erc20 Là Gì? Những Loại Ví Erc20 Là Gì ? Ưu Nhược Điểm & Cách Tạo Erc20 Token

Ví dụ:

package Generics;import java.util.ArrayList;import java.util.List;abstract class Shape abstract void draw();class Circle extends Shape void draw() System.out.println("ve hinh tron"); class Square extends Shape void draw() System.out.println("ve hinh Vuong"); public class thử nghiệm // drawShapes chỉ chấp nhận các hình dáng thuộc lớp Shape hoặc con của nó public static void drawShapes(List lists) for (Shape s : lists) s.draw(); // call method của lớp Shape tự lớp bé public static void main(String args<>) danh sách list1 = new ArrayList(); list1.add(new Square()); list list2 = new ArrayList(); list2.add(new Circle()); list2.add(new Circle()); drawShapes(list1); drawShapes(list2); Output:

*

Tổng kết:

Trong bài xích này, tôi đã giới thiệu chúng ta những điểm sáng cơ bạn dạng của generic, cách tạo class generic, cách khởi chế tạo phương thức, đối tượng người sử dụng và mảng trong generic. Hi vọng qua bài viết này các chúng ta có thể có một khoảng nhìn bao gồm về generic. Generic rất hữu dụng trong việc kiểm soát kiểu dữ liệu, bên cạnh đó khi đi rộp vấn cũng có nhiều thắc mắc về chủ đề này do vậy chúng ta cũng hãy bài viết liên quan từ các nguồn khác để loại thiển năng lực và chuyên môn của mình. Chúc các bạn thành công.