มันง่ายจริงๆ มันเป็นคุณสมบัติใหม่ที่นำมาใช้ในJ2SE 5 การระบุวงเล็บเหลี่ยมหลังชื่อคลาสหมายความว่าคุณกำลังสร้างชนิดข้อมูลชั่วคราวซึ่งสามารถเก็บข้อมูลประเภทใดก็ได้
ตัวอย่าง:
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);
}
}
แทนที่จะเป็นเช่น<T>นั้นคุณสามารถเขียนอะไรก็ได้จริง ๆ และมันจะทำงานในลักษณะเดียวกัน ลองเขียนในสถานที่ของ<ABC><T>
นี่เป็นเพียงเพื่อความสะดวก:
<T> ถูกเรียกว่าประเภทใดก็ได้
<E> เป็นประเภทองค์ประกอบ
<N> เป็นประเภทตัวเลข
<V> เป็นค่า
<K> เป็นกุญแจสำคัญ
แต่คุณสามารถตั้งชื่อทุกอย่างที่คุณต้องการมันไม่สำคัญ
นอกจากนี้Integer, String, Booleanฯลฯ เป็นเสื้อคลุมชั้นเรียนของ Java ซึ่งช่วยในการตรวจสอบประเภทในระหว่างการรวบรวม ตัวอย่างเช่นในโค้ดด้านบนobjเป็นประเภทStringดังนั้นคุณไม่สามารถเพิ่มประเภทอื่น ๆ ได้ (ลองobj.add(1)มันจะทำให้เกิดข้อผิดพลาด) ในทำนองเดียวกันobj1เป็นIntegerประเภทที่คุณไม่สามารถเพิ่มประเภทอื่น ๆ (ลองobj1.add("hello")ข้อผิดพลาดจะมี)
T createObjectควรจะเป็นภายในสระว่ายน้ำหรือ PoolFactory? อยู่ที่ไหนthis.freeObjects = ...ควรจะเป็น? นั่นเป็นตัวอย่างที่แยกจากกันหรือไม่ มันผิดกฎหมายที่จะมีมัน; มันจะต้องมีวิธีการภายใน