Nó thực sự đơn giản. Đây là một tính năng mới được giới thiệu trong J2SE 5 . Chỉ định dấu ngoặc nhọn sau tên lớp có nghĩa là bạn đang tạo kiểu dữ liệu tạm thời có thể chứa bất kỳ loại dữ liệu nào.
Thí dụ:
class A<T>{
T obj;
void add(T obj){
this.obj=obj;
}
T get(){
return obj;
}
}
public class generics {
static<E> void print(E[] elements){
for(E element:elements){
System.out.println(element);
}
}
public static void main(String[] args) {
A<String> obj=new A<String>();
A<Integer> obj1=new A<Integer>();
obj.add("hello");
obj1.add(6);
System.out.println(obj.get());
System.out.println(obj1.get());
Integer[] arr={1,3,5,7};
print(arr);
}
}
Thay vì <T>, bạn thực sự có thể viết bất cứ điều gì và nó sẽ hoạt động theo cùng một cách. Hãy thử viết <ABC>tại chỗ <T>.
Điều này chỉ để thuận tiện:
<T> được gọi là bất kỳ loại
<E> như kiểu phần tử
<N> như loại số
<V> như giá trị
<K> làm chìa khóa
Nhưng bạn có thể đặt tên cho nó bất cứ điều gì bạn muốn, nó không thực sự quan trọng.
Hơn nữa, Integer, String, Booleanvv là lớp wrapper của Java mà giúp đỡ trong việc kiểm tra các loại quá trình biên dịch. Ví dụ, trong đoạn mã trên, objcó kiểu String, vì vậy bạn không thể thêm bất kỳ loại nào khác vào nó (thử obj.add(1), nó sẽ báo lỗi). Tương tự, obj1là Integerloại, bạn không thể thêm bất kỳ loại nào khác vào nó (thử obj1.add("hello"), lỗi sẽ ở đó).
T createObjectcho là ở bên trong Pool hoặc PoolFactory? Nơi nào đượcthis.freeObjects = ...cho là? Đó có phải là một ví dụ riêng biệt? Nó là bất hợp pháp để có nó ở đó; nó phải ở trong một phương thức