วันนี้เพื่อนถามมาว่า มีอะไรในจาวาที่เหมือน Template ในภาษาซีหรือป่าว ก็เลยนึกถึงสมัยเรียนขึ้นมาเลย ที่อาจารย์จับเทียบ Template กับ Generic ว่ามันต่างกันยังไง แล้วใช้ยังไง (ต่างกันยังไง จำไม่ได้แล้วหละ ) สำหรับประโยชน์ของมันที่ผมชอบมากที่สุดเลยก็คือ ไม่ต้องนั่งเปลี่ยน Type ให้ปวดหัววุ่นวายอีกแล้ว แถม ไม่ต้องกังวลกับ Class cast exception ด้วย (สมัยก่อนเวลาจะเก็บอะไรลง Collection แล้วเอาออกมาที ใช้ไปไกลๆ แล้วมักลืมว่าตัวเองเก็บอะไรเอาออกมาทีก็เจอประจำ)
ถ้าใครยังนึกไม่ออกก็ลองนึกถึงพวก Collection ทั้งหลายดูเช่น List<String>, Set<Integer> อะไรพวกนี้ ที่อยู่ใน <> นั่นแหละที่เรียกว่า Generic
มาดู code ตัวอย่างกันดีกว่า
class Test {
public T extends Comparable max (T a, T b) {
if (a.compareTo(b) > 0)
return a;
else
return b;
}
public static void main(String... args) {
Test t = new Test();
int a = 0, b = 1;
System.out.println(t.max(a,b));
}
}
จาก code ด้านบนจะเห็นว่าการใช้ Generic แทบไม่ต่างจาก Template เลย แต่ Object ที่จะใส่เข้ามาได้ไช่ว่าจะเป็นอะไรก็ได้เหมือน Template แต่ถูกกำหนดด้วย extend ที่บอกว่า Object นั้นต้องถูกสร้างจาก Class ที่ extend มาจากอะไร
ว่าไปแล้วก็เรียนผ่านมาตั้งนานแล้ว ส่วนใหญ่ก็เอาแต่ใช้ไม่เคยสร้างเองก็เลยลืมๆ ไปบ้าง (ปกติใช้แต่ของคนอื่น พวก Collection อะแหละ) พอขุดมาอีกทีก็รู้สึก โอ้ว มันช่างมหัศจรรย์นัก ทำไมตอนเรียนไม่ค่อยรู้สึกอย่างนี้หว่า 555 จริงๆ ยังมีอีกหลายอย่างที่เพิ่มมาในจาวา 5 นะเนี๊ยะ ที่เคยพูดไปแล้วก่อนหน้านี้ ก็ Annotation เดี๊ยวเอามาลองเขียนให้หมดเลยดีกว่า เอแต่ จาวา 6 ออกมาแล้วนี่หว่า รู้สึกเท่าที่ใช้มารู้แต่ว่ามันเร็วขึ้น ยังไม่ค่อยได้เข้าไปดูด้านในจริงๆ เลยว่ามีอะไรเปลี่ยนไปมั่ง สงสัยต้องลองเอามาดูอย่างละเอียดหน่อยและ