อย่างไรก็ตาม หากเราต้องการเขียนเป็น method เดียว เพื่อให้โปรแกรมกระชับและมีประสิทธิภาพ รวมถึงตัว compiler สามารถตรวจสอบความถูกต้องของชนิดของข้อมูลให้ได้ วิธีการนึงคือการใช้งาน Generic method ซึ่งเริ่มมีมาตั้งแต่ Java รุ่น 5.0 ไปครับ
ลองดูตัวอย่างการเขียนโปรแกรมโดยใช้ method ปกติ เพื่อแสดงค่าของสมาชิกของตัวแปรชุด (Array)
//======= Normal method to print an integer array ========== public class MyArray{ public void printArray(int[] arr){ for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } } public static void main(String[] args){ MyArray m = new MyArray(); int[] a = {1,2,3}; m.printArray(a); } }
คราวนี้ลองมาเปลี่ยน method นี้ให้เป็น generic method กันดูครับ
//======= Generic method to print any array ========== public class MyArray{ public <E> void printArray(E[] arr){ for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } } public static void main(String[] args){ MyArray m = new MyArray(); //int[] a = {1,2,3}; //must create array object to be compatible with generic type Integer[] a = {1,2,3}; String[] b = {"I","love","you"}; m.printArray(a); m.printArray(b); } }
ข้อสังเกตการสร้างและใช้งาน generic method คือ
- Generic method มี <E> หน้า return type ซึ่งสัญลักษณ์พิเศษนี้ก็คือตัวแทนของชนิดของข้อมูล นั่นคือ E ในที่นี้อาจจะแทน Integer, String, Double ฯลฯ (เป็น reference type ไม่ใช่ primitive type เช่น int, double, char)
- เราสามารถใช้ตัวอักษรอื่นแทน E ก็ได้ ซึ่งปกติจะมีรูปแบบแนะนำว่าควรใช้ตัวอักษรแบบไหนเพื่ออะไร เช่น E แทน Elements หรือ T แทน Types ดูเพิ่มเติมได้ที่นี่ครับ
- การใช้งานตัว E ใน method ก็เหมือนชนิดของข้อมูลทั่วไป เช่น เอาไว้หน้าตัวแปร
ข้อมูลอ้างอิง
http://www.tutorialspoint.com/java/java_generics.htm
http://docs.oracle.com/javase/tutorial/java/generics/
No comments:
Post a Comment