Professional Documents
Culture Documents
Lythuyet PDF
Lythuyet PDF
- Trong ví dụ trên ta thấy để in ra được dãy số, chúng ta cần cast toàn
bộ Object trong List sang Integer, điều này khiến việc code trở nên phức
tạp. Mõi lần sử dụng các phần tử trong List chúng ra lại phải cast nó sang
đối tượng chúng a cần
- Bây giờ chúng ta hãy xem qua đoạn code có sử dụng Generic:
Code ví dụ:
1
o System.out.print(integer + " ");}
o }
}
o Với việc dùng Generic chúng ta có thể thấy giờ đây có thể dụng List một
cách đơn giản hơn, chúng ra không cần việc cast các phần tử trong List nữa
thay vào đó lúc khao báo chỉ cần thêm tên class chúng ra cần dùng là xong.
o Khái niệm: Generic là một lớp chung có thể tham chiếu đến bất cứ lớp nào.
Nó là một đại diện, biểu trưng cho các lớp trong method, class, interface,...
o Dog
2
o package main.java.com.group3.genericjava;
o
o public class Dog {
o
o private String name;
o private int cost;
o
o public Dog() {
o }
o
o public Dog(String name, int cost) {
o this.name = name;
o this.cost = cost;
o }
o
o @Override
o public String toString() {
o return "Ten cho: " + name + " Gia: " + cost;
o }
}
- Như chúng ta thấy 2 class trên hoàn toàn khác biệt nhau và không hề có mối
liên hệ với nhau. Bây giờ chúng ta sẽ tạo ra một phương thức in ra thông tin
của các đối tượng Car và Dog.
Code ví dụ:
o public class MethodGeneric {
o
o public static <T> void inThongTin(T anything) {
o System.out.println("Thong tin: \n" + anything.toString());
o }
o
o public static void main(String[] args) {
o Dog dog = new Dog("Pug", 1000);
o Car car = new Car("Honda Civic", 10000);
o
o inThongTin(dog);
o inThongTin(car);
o }
}
3
Kết quả:
- Như vậy chúng ta có thể thấy nhờ dùng Generic chúng ta có thể tạo ra một
Method Generic, một phương thưc chúng ta có thể sử dụng cho tất cả các
đối tượng.
2. Class Generic
- Tương tự ở các phương thức ở class chúng ta vẫn có thể dùng Generic
Với 1 Generic:
o public class KetQua<T> {
o
o private T result;
o
o public KetQua() {
o
o }
o
o public T getResult() {
o return result;
o }
o
o public void setResult(T t) {
o this.result = t;
o }
}
Với nhiều Generic:
o public class Couple<K, V> { // co the them nhieu generic khác: vd
Coupe<K, VF, V>
o
o private K key;
o private V value;
4
o
o public Couple(K key, V value) {
o this.key = key;
o this.value = value;
o }
o
o public K getKey() {
o return key;
o }
o
o public void setKey(K key) {
o this.key = key;
o }
o
o public V getValue() {
o return value;
o }
o
o public void setValue(V value) {
o this.value = value;
o }
}
Một số ví dụ về Generic trong class:
o public class GenericClassVidu {
o
o public static void main(String[] args) {
o Couple<String, Integer> couple = new Couple<>("Nguyen Van
A", 50);
o
o System.out.println("Key: " + couple.getKey());
o System.out.println("Value: " + couple.getValue());
o }
}
Kết quả:
5
- Như vậy thông qua sử dụng Generic chúng ta đã tạo ra một class có thể sử
dụng với nhiều class kacs nhau.
3. Extends trong Generic
- Genera bản chất nó là một đại diện của class nên chúng ra cũng có thể thực
hiện việc extends trên nó. Cùng xem qua ví dụ về việc extends trên Generic:
o Rõ ràng:
o List<Car> list;
o Pair<String, Integer> pair;
Couple<Car, Owner> couple;
o Không rõ ràng:
o List<?> list;
o Pair<String, ?> pair;
Couple<?, ? extends Integer>
- Lưu ý: “?” đóng vai trò là một quy ước, một biểu trưng, một đại diện chứ
không phải là một loại cụ thể. Nó chỉ là gợi ý các quy tắc thực thi bởi
6
Generics Java rằng những loại có giá trị trong bất kỳ tình huống cụ thể mà
các ký hiệu đại diện đã được sử dụng
Code ví dụ:
7
private T result;
public KetQua(Class<T> tClass) {
T res = tClass.newInstance(); // --> Dung
}
public T getResult() {
return result;
}
public void setResult(T t) {
this.result = t;
}
}
8
o Chúng ta chỉ có thể lưu một kiểu đối tượng duy nhất trong generics.
Nó không cho phép lưu trữ 2 đối tượng có kiểu khác nhau.
o Ví dụ:
o List<String> list = new ArrayList<>();
o list.add("Hello");
list.add(new Dog("Pug", 1000)); // --> Sai
o Lỗi ở bên trên khi dịch sẽ được phát hiện ra lỗi không dẫn đến lôi lỗi
lúc chương trình đã chạy (điều này rất nguy hiểm)
Java:Generics https://medium.com/@cinish/java-generics-38edb8bb6b71
[Java] Generic https://medium.com/@bill_lin/java-generic-18a9f0bec22