ความรู้เบื้องต้นเกี่ยวกับ Generic จ้า
เธซเธเนเธฒ 1 เธเธฒเธ 1
ความรู้เบื้องต้นเกี่ยวกับ Generic จ้า
[quote]
คัดมาจาก : http://somkiat.exteen.com/20041029/generic-java-tiger
ใน J2SE 1.4.X นั้นมี Colection ที่จะเก็บ object ต่างๆ ไว้ แต่ว่า Collection ไม่สามารถเก็บชนิดข้อมูลที่เป็น primitive type ได้
แต่ว่าสามารถเก็บ Wrapper Class ของ primitive type ได้ เมื่อต้องการเก็บข้อมูล primitive ก็แปลงมาเป็น Wrapper Object ได้
เช่น
int data = 1;
Integer obje1 = new Integer(data);
ใน Collection object นั้นเมื่อทำการดึงข้อมูลออกมาจะมี type เป็น object เพื่อต้องการให้ type safty ดังนั้นเราจำเป้นจะต้อง
cast type ของ object ให้เป็น Object type ที่ต้องการ ดังนั้นจะเห็นได้ว่าการจัดการ collection object นั้นเป็นเรื่องที่ยากและยัง
เสี่ยงต่อการเกิด error ในขณะ runtime (Runtime Error) อีกด้วย
ดังนั้นใน java 5.0 หรือ codename คือ "Tiger" นั้นได้เพิ่มความสามารถของภาษามาให่ซึ่งก็คือ "Generic" ซึ่งจะทำให้การ
จัดการ collection ง่ายขึ้น เช่น ไม่จำเป็นต้อง cast type ดังนั้นปัญหาของ Runtime Error จึงไม่มีทางเกิดขึ้นอย่างแน่นอน
เพราะว่าจะทำการตรวจสอบ error ในระหว่างการ compile program นั่นเอง
ตัวอย่างการใช้งาน Generric ในการจัดการ Collection
//ใน Version 1.4.x
LinkedList list = new LinkedList();
list.add(new Integer(1));
Integer value = (Integer) list.get(0);
//ใน version 5.0
LinkdeList list = new LinkedList()
List.add(new Integer(1));
Integer value = list.get(0);
และยังสามารถใช้คุณสมบัติ autoboxing ได้อีกด้วย ดังนี้
LinkdeList list = new LinkedList()
List.add(1);
Integer value = list.get(0);
Implement Generic type
เราสามารถสร้าง generic type มาใช้เองได้ เช่น
interface List {
void add(E x);
Iterator iterator();
}
interface Iterator {
E next();
boolean hasNext();
}
class LinkedList implements List {
// implementation
}
ตัวอย่างการเรียกใช้งาน
LinkedList list = new LinkedList();
คือ parameter type เป็นเพียงชื่ออ้างถึงเท่านั้น โดยเมื่อเราสร้าง object ขึ้นมาสามารถใช้เป็น Object type ได้ แต่ไม่
สามารถกำหนดเป็น promitive type ได้
Generic Method
generic ไม่ใช่จำกัดแค่เพียง class, interface เท่านั้น แต่ว่ายังสามารถใช้ใน method ได้อีกด้วยครับ โดยสามาถใช้ใน
- non-static method
- static method
- constructor
แต่ว่า syntax อาจจะแตกต่างไปบ้างเล็กน้อย และการเรียกใช้ method ก็เหมือนกับ non-generic method ทั่วไป
ตัวอย่าง
void printCollection(Collection c) {
for(Object o:c) {
System.out.println(e);
}
}
คือ unknow type หรือเรียกว่า widecards
Widecards มี 3 ชนิดคือ
1. "? extends Type"" คือการ extends นั่นเอง subsclass ของ Type นั่นเอง
2. "? super Type" คือ Super class ของ Type
3. "?" คือ any type หรือว่า type อะไรก็ได้
ตัวอย่าง
public void draw( List shape ) {
// rest of the code is the same
}
มีต่อ >>
คัดมาจาก : http://somkiat.exteen.com/20041029/generic-java-tiger
ใน J2SE 1.4.X นั้นมี Colection ที่จะเก็บ object ต่างๆ ไว้ แต่ว่า Collection ไม่สามารถเก็บชนิดข้อมูลที่เป็น primitive type ได้
แต่ว่าสามารถเก็บ Wrapper Class ของ primitive type ได้ เมื่อต้องการเก็บข้อมูล primitive ก็แปลงมาเป็น Wrapper Object ได้
เช่น
int data = 1;
Integer obje1 = new Integer(data);
ใน Collection object นั้นเมื่อทำการดึงข้อมูลออกมาจะมี type เป็น object เพื่อต้องการให้ type safty ดังนั้นเราจำเป้นจะต้อง
cast type ของ object ให้เป็น Object type ที่ต้องการ ดังนั้นจะเห็นได้ว่าการจัดการ collection object นั้นเป็นเรื่องที่ยากและยัง
เสี่ยงต่อการเกิด error ในขณะ runtime (Runtime Error) อีกด้วย
ดังนั้นใน java 5.0 หรือ codename คือ "Tiger" นั้นได้เพิ่มความสามารถของภาษามาให่ซึ่งก็คือ "Generic" ซึ่งจะทำให้การ
จัดการ collection ง่ายขึ้น เช่น ไม่จำเป็นต้อง cast type ดังนั้นปัญหาของ Runtime Error จึงไม่มีทางเกิดขึ้นอย่างแน่นอน
เพราะว่าจะทำการตรวจสอบ error ในระหว่างการ compile program นั่นเอง
ตัวอย่างการใช้งาน Generric ในการจัดการ Collection
//ใน Version 1.4.x
LinkedList list = new LinkedList();
list.add(new Integer(1));
Integer value = (Integer) list.get(0);
//ใน version 5.0
LinkdeList list = new LinkedList()
List.add(new Integer(1));
Integer value = list.get(0);
และยังสามารถใช้คุณสมบัติ autoboxing ได้อีกด้วย ดังนี้
LinkdeList list = new LinkedList()
List.add(1);
Integer value = list.get(0);
Implement Generic type
เราสามารถสร้าง generic type มาใช้เองได้ เช่น
interface List {
void add(E x);
Iterator iterator();
}
interface Iterator {
E next();
boolean hasNext();
}
class LinkedList implements List {
// implementation
}
ตัวอย่างการเรียกใช้งาน
LinkedList list = new LinkedList();
คือ parameter type เป็นเพียงชื่ออ้างถึงเท่านั้น โดยเมื่อเราสร้าง object ขึ้นมาสามารถใช้เป็น Object type ได้ แต่ไม่
สามารถกำหนดเป็น promitive type ได้
Generic Method
generic ไม่ใช่จำกัดแค่เพียง class, interface เท่านั้น แต่ว่ายังสามารถใช้ใน method ได้อีกด้วยครับ โดยสามาถใช้ใน
- non-static method
- static method
- constructor
แต่ว่า syntax อาจจะแตกต่างไปบ้างเล็กน้อย และการเรียกใช้ method ก็เหมือนกับ non-generic method ทั่วไป
ตัวอย่าง
void printCollection(Collection c) {
for(Object o:c) {
System.out.println(e);
}
}
คือ unknow type หรือเรียกว่า widecards
Widecards มี 3 ชนิดคือ
1. "? extends Type"" คือการ extends นั่นเอง subsclass ของ Type นั่นเอง
2. "? super Type" คือ Super class ของ Type
3. "?" คือ any type หรือว่า type อะไรก็ได้
ตัวอย่าง
public void draw( List shape ) {
// rest of the code is the same
}
มีต่อ >>
ต่อ
[ต่อ]
public static void sort(List list) {
Object a[] = list.toArray();
Arrays.sort(a);
ListIterator i = list.listIterator();
for(int j=0; j
public static void sort(List list) {
Object a[] = list.toArray();
Arrays.sort(a);
ListIterator i = list.listIterator();
for(int j=0; j
Similar topics
» ??????าง????? Generic (???????? array ??ับ)
» ??????????วกับ SCWCD ??ับ
» generic cialis online uk
» Buy generic cialis online now
» A simple generic class in Java v. 5.0
» ??????????วกับ SCWCD ??ับ
» generic cialis online uk
» Buy generic cialis online now
» A simple generic class in Java v. 5.0
เธซเธเนเธฒ 1 เธเธฒเธ 1
Permissions in this forum:
เธเธธเธเนเธกเนเธชเธฒเธกเธฒเธฃเธเธเธดเธกเธเนเธเธญเธ