เมธอด getClass() คลาสอ็อบเจกต์ และบทนำเกี่ยวกับ Reflection - 1

“สวัสดี อามีโก้!”

"ตอนนี้ถึงเวลาสำหรับกิจกรรมหลักแล้ว เราจะทำความคุ้นเคยกับคลาส Class และสัมผัสที่ Reflection
อย่างที่คุณคงรู้อยู่แล้วว่าทุกอย่างใน Java นั้นเป็นออบเจกต์ และออบเจ็กต์ต้องการอะไร แต่ละออบเจ็กต์มีหน้าที่อะไร มันเกี่ยวกับอะไร"

"ห้องเรียน!"

"ถูกต้อง! ทำได้ดี แต่ละอ็อบเจกต์มีคลาส แต่การกลับไปที่อ็อบเจกต์... อ็อบเจกต์บางออบเจกต์มีเอนทิตีทั้งหมด ในขณะที่อ็อบเจกต์อื่นๆ ก็ช่วยจัดการมัน"

"ประเภทหลังนี้รวมถึงFileOutputStreamและThreadเมื่อคุณสร้าง ออบเจกต์ เธรดเธรดใหม่จะไม่ถูกสร้าง เธรดถูกสร้างขึ้นโดยเครื่องเสมือน Java หลังจากเรียกใช้เมธอด start() อ็อบเจ็กต์นี้ช่วยจัดการกระบวนการ"

"เหมือนกันกับFileOutputStream : ไฟล์ถูกจัดเก็บไว้ในดิสก์ และ OS จะจัดการที่เก็บข้อมูลและการเข้าถึง แต่เราสามารถโต้ตอบกับมันผ่านวัตถุไฟล์ได้อีกครั้งด้วยความช่วยเหลือของเครื่องเสมือน Java"

“ใช่ ฉันเข้าใจแล้ว”

"จึงมีคลาสพิเศษที่เรียกว่าคลาสสำหรับการโต้ตอบกับคลาส"

"เดาได้ไม่ยากเลย"

"ใช่ ทุกครั้งที่เครื่องเสมือน Java โหลดคลาสใหม่ลงในหน่วยความจำ มันจะสร้างวัตถุคลาส ซึ่งคุณสามารถใช้เพื่อรับข้อมูลเฉพาะเกี่ยวกับคลาสที่โหลดได้"

"แต่ละคลาสและออบเจกต์เชื่อมโยงกับ « ออบเจ็กต์คลาส »"

ตัวอย่าง คำอธิบาย
Class clazz = Integer.class;
รับวัตถุคลาสของคลาสจำนวนเต็ม
Class clazz = int.class;
รับวัตถุ Class ของคลาส int
Class clazz = "123".getClass();
รับวัตถุคลาสของวัตถุสตริง
Class clazz = new Object().getClass();
รับวัตถุคลาสของวัตถุวัตถุ

"ว้าว! น่าสนใจจัง!"

"คุณจำได้ไหมว่า word classเป็นคีย์เวิร์ดในภาษา Java และไม่สามารถใช้เป็นชื่อตัวแปรได้"

“อ๋อ ครับ ผมรู้แล้ว ผมลืมไปเลย”

"คุณเคยใช้วัตถุคลาสที่ไหนสักแห่งแล้วหรือยัง"

"ใช่ เราใช้มันเมื่อเราเขียนการนำวิธีการเท่ากับไปใช้ของเราเอง"

"ใช่ คุณสามารถใช้เมธอด getClass() เพื่อทดสอบว่าออบเจกต์มีคลาสเดียวกันหรือไม่"

"แล้วคุณจะทำอะไรกับวัตถุนี้ได้บ้าง"

"อืม หลายอย่าง:"

รหัสจาวา คำอธิบาย
Class s = int.class;
String name = s.getName();
รับชื่อคลาส
Class s = Class.forName("java.lang.String");
รับคลาสตามชื่อ
Object o1 = String.valueOf(1);
Object o2 = 123 + "T";
o1.getClass() == o2.getClass();
เปรียบเทียบคลาสของวัตถุ

"น่าสนใจ แต่ไม่เจ๋งเท่าที่ฉันคิด"

"คุณอยากให้มันดูเท่ไหม มีรีเฟลกชัน  ด้วย รีเฟลกชันเจ๋งมาก"

เงาสะท้อน คืออะไร ”

" การสะท้อนกลับเป็นความสามารถของคลาสในการรับข้อมูลเกี่ยวกับตัวมันเอง Java มีคลาสพิเศษ:  FieldและMethodซึ่งคล้ายกับ คลาส คลาสสำหรับคลาสต่างๆ เช่นเดียวกับที่ ออบเจกต์ คลาสช่วยให้คุณได้รับข้อมูลเกี่ยวกับคลาส ออบเจ็กต์ฟิลด์จะให้ข้อมูลเกี่ยวกับฟิลด์ และวัตถุเมธอดให้ข้อมูลเกี่ยวกับเมธอด และดูว่าคุณสามารถทำอะไรกับเมธอดได้บ้าง:"

รหัสจาวา คำอธิบาย
Class[] interfaces = List.class.getInterfaces();
รับรายการวัตถุคลาสสำหรับอินเทอร์เฟซของคลาสรายการ
Class parent = String.class.getSuperclass();
รับวัตถุคลาสของคลาสแม่ของคลาสสตริง
Method[] methods = List.class.getMethods();
รับรายการเมธอดของคลาส List
String s = String.class.newInstance();
สร้างสตริงใหม่
String s = String.class.newInstance();
Method m = String.class.getMethod("length");
int length = (int) m.invoke(s)
รับเมธอดความยาวของคลาส String และเรียกใช้บน String s

"ว้าว! ตอนนี้มันเจ๋งมาก!"