Java: this ตอนที่ 5 ใช้ this เพื่อส่งออบเจ็กต์ผ่านทางเมธอด

เราสามารถใช้ this เพื่อส่งเป็นอากิวเมนต์ (argument) ผ่านทางเมธอดได้ ลองมาดูโค้ดง่าย ๆ กันค่ะ

 

โค้ดตัวอย่าง

 

ทดสอบโปรแกรม

สร้างคลาส TestEvent ขึ้นมาทดสอบโปรแกรม

 

เมื่อเราเรียกใช้งานเมธอด addEvent()

ก็จะได้ผลลัพธ์ดังนี้

java-this-what-is-this-5-1

 

เรามักจะเห็นการทำงานของโค้ดลักษณะนี้ในการจัดการกับเหตุการณ์ต่าง ๆ (event handling)

(คลิกรายละเอียดเพิ่มเติม)

 

เช่น โค้ดบางส่วนที่เราทำการ addActionListener(…) ให้กับปุ่ม Enter ดังนี้

 

เราอาจจะสงสัยว่า this ที่เป็นตำแหน่งอ้างถึงออบเจ็กต์ปัจจุบันนั้น คือออบเจ็กต์อะไร? มาหาคำตอบกันค่ะ

 

นำเมาส์ไปชี้ที่เมธอด addActionListener(…) และกดปุ่ม Ctrl ค้างเอาไว้ เราจะพบกับรายละเอียดของเมธอด

java-this-what-is-this-5-2

ซึ่งตอนนี้เราก็รู้แล้วว่า this อ้างถึงตำแหน่งของ interface คลาส ActionListener

 

เมื่อเราคลิกเข้าไปดูรายละเอียดภายใน (นำเมาส์ไปชี้ที่ เมธอด addActionListener(…) จะมีเส้นใต้ขึ้น และคลิกเข้าไปข้างใน) เราจะพบโค้ดดังนี้

java-this-what-is-this-5-3

 

เมธอด addActionListener(…) เขียนเอาไว้ใน abstract คลาส AbstractButton

 

หากเราเกิดคำถามต่อมาว่า แล้วออบเจ็กต์ถูกสร้างตอนไหนละ? เราก็นำเมาส์ไปชี้ที่เมธอด add(…) กด Ctrl และคลิกเข้าไป เราจะพบกับโค้ดดังนี้

 

เราจะเห็นว่า เมธอด add(Class<T> t, T l) รับค่าเข้ามา 2 ค่าคือ

 

T เป็นประเภทของ listener ที่ถูกเพิ่ม

I เป็น listener ที่เพิ่มเข้ามา

 

และคำสั่งภายในเมธอด ก็มีการสร้างออบเจ็กต์ขึ้นมา จากนั้นเก็บเอาไว้ใน listenerList

 

คำถามต่อมา แล้วเรานำเหตุการณ์ที่เกิดขึ้นไปทำอะไร ตอนไหนละ?

 

คำตอบก็คือต้องย้อนกลับไปตอนที่เรา implements interface ชื่อ ActionListener เข้ามา

 

จำได้มั้ยคะ ActionListener ก็คือตำแหน่งอ้างอิงของ this นั่นเอง (interface สร้างออบเจ็กต์ไม่ได้ แต่ใช้อ้างอิงได้)

 

ตอนที่เรา implements อินเตอร์เฟส ActionListener เข้ามา เราจะได้เมธอด actionPerformed(…) มาไว้ใช้งาน

 

ซึ่งเมธอดนี้รับค่าชนิด ActionEvent เข้ามา ซึ่งเราใช้ในการตรวจสอบว่า มีเหตุการณ์อะไรเกิดขึ้นบนหน้าจอบ้าง

 

และจัดการกับเหตุการณ์ต่าง ๆ ที่เกิดขึ้นได้ตามต้องการ ซึ่งในกรณีนี้เราได้ setActionCommand(…) ให้กับเหตุการณ์ต่าง ๆ เอาไว้แล้ว

 

Note: การอ่านโค้ดก็เหมือนกับการอ่านหนังสือ ฝึกบ่อยๆ แล้วจะเก่งขึ้นเรื่อย ๆ ค่ะ

 

สรุป

เราสามารถใช้ this เพื่อส่งเป็นอากิวเมนต์ไปให้เมธอดทำงานได้

 

 

การใช้งาน this

เราสามารถใช้ this เพื่อทำงานต่าง ๆ ได้ดังนี้

1. การใช้ this เรียกใช้คอนสตรัคเตอร์

2. การใช้ this อ้างถึงตัวแปร

3. การใช้ this เรียกใช้เมธอด

4. การใช้ this เพื่อส่งออบเจ็กต์ผ่านทางเมธอด

5. การใช้ this เพื่อส่งออบเจ็กต์ผ่านทางคอนสตรัคเตอร์

6. การใช้ this เพื่อคืนค่าตำแหน่งออบเจ็กต์

 

 

Comments

comments

ธมนวรรณ มณีจันทร์

เป้าหมาย : "พัฒนาคุณภาพชีวิตผู้คน ผ่านการส่งมอบความรู้ ด้วยเทคโนโลยีที่ดีที่สุด" ... ประวัติ