มันง่ายจริงๆ มันเป็นคุณสมบัติใหม่ที่นำมาใช้ใน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 = ...
ควรจะเป็น? นั่นเป็นตัวอย่างที่แยกจากกันหรือไม่ มันผิดกฎหมายที่จะมีมัน; มันจะต้องมีวิธีการภายใน