กลไกการสะท้อนชวา
กลไกการสะท้อนกลับของ Java อยู่ในสถานะการทำงาน วิธีนี้เรียกว่ากลไกการสะท้อนของภาษา Java
กลไกการสะท้อนกลับของ Java ส่วนใหญ่ให้ฟังก์ชั่นต่อไปนี้: กำหนดคลาสที่วัตถุใด ๆ เป็นของรันไทม์; วัตถุ;
1. รับคุณสมบัติของวัตถุ
การคัดลอกรหัสมีดังนี้:
วัตถุสาธารณะ GetProperty (เจ้าของวัตถุ, String FieldName) โยนข้อยกเว้น {
คลาส OwnerClass = owner.getClass ();
Field Field = OwnerClass.getField (FieldName);
คุณสมบัติวัตถุ = field.get (เจ้าของ);
คืนทรัพย์สิน;
-
คลาส OwnerClass = ownow.getClass (): รับคลาสของวัตถุนี้
Field Field = OwnerClass.getField (FieldName): รับแอตทริบิวต์ที่ประกาศโดยคลาสผ่านชั้นเรียน
Object Property = field.get (เจ้าของ): รับอินสแตนซ์ของคุณสมบัตินี้ผ่านวัตถุ
2. รับคุณสมบัติคงที่ของชั้นเรียนที่แน่นอน
การคัดลอกรหัสมีดังนี้:
วัตถุสาธารณะ getStaticProperty (ชื่อคลาสสตริง, สตริงฟิลด์ชื่อ)
โยนข้อยกเว้น {
คลาส OwnerClass = class.forName (className);
Field Field = OwnerClass.getField (FieldName);
คุณสมบัติวัตถุ = field.get (OwnerClass);
คืนทรัพย์สิน;
-
คลาส OwnerClass = class.forName (className): ก่อนอื่นรับคลาสของคลาสนี้
Field Field = OwnerClass.getField (FieldName): เช่นเดียวกับด้านบนรับแอตทริบิวต์ที่ประกาศโดยชั้นเรียนผ่านชั้นเรียน
Object Property = field.get (OwnerClass): นี่แตกต่างจากด้านบนเล็กน้อยเนื่องจากคุณสมบัติคงที่ดังนั้นจึงถูกนำมาจากคลาสของคลาสโดยตรง
3. วิธีการดำเนินการวัตถุ
การคัดลอกรหัสมีดังนี้:
วัตถุสาธารณะ invokemethod (เจ้าของวัตถุ, String MethodName, Object [] args) โยนข้อยกเว้น {
คลาส OwnerClass = owner.getClass ();
คลาส [] argsclass = คลาสใหม่ [args.length];
สำหรับ (int i = 0, j = args.length; i <j; i ++) {
argsclass [i] = args [i] .getClass ();
-
วิธีวิธี = OwnerClass.getMethod (MethodName, ArgsClass);
return method.invoke (เจ้าของ, args);
-
คลาส owner_class = ownow.getClass (): ก่อนอื่นคุณต้องได้รับคลาสของวัตถุนี้
บรรทัดที่ 5 ถึง 9: กำหนดค่าอาร์เรย์คลาสของพารามิเตอร์เป็นเงื่อนไขสำหรับการค้นหาวิธี
วิธีการ = OwnerClass.getMethod (MethodName, ArgsClass): รับวิธีการที่จะดำเนินการโดย MethodName และ ArgsClass (ประเภทพารามิเตอร์ที่ตั้งค่าไว้ในอาร์เรย์เมธอด)
method.invoke (เจ้าของ, args): พารามิเตอร์ที่ดำเนินการวิธีการวิธีการเป็นเจ้าของวัตถุที่ดำเนินการวิธีนี้และอาร์เรย์พารามิเตอร์ args . ค่าส่งคืนเป็นวัตถุซึ่งเป็นค่าส่งคืนของวิธี
4. ดำเนินการแบบคงที่ของคลาสที่แน่นอน
การคัดลอกรหัสมีดังนี้:
วัตถุสาธารณะ invokestaticMethod (String className, String MethodName
Object [] args) โยนข้อยกเว้น {
คลาส OwnerClass = class.forName (className);
คลาส [] argsclass = คลาสใหม่ [args.length];
สำหรับ (int i = 0, j = args.length; i <j; i ++) {
argsclass [i] = args [i] .getClass ();
-
วิธีวิธี = OwnerClass.getMethod (MethodName, ArgsClass);
return method.invoke (null, args);
-
หลักการพื้นฐานเป็นตัวอย่างที่ 3 ความแตกต่างคือบรรทัดสุดท้าย
5. สร้างอินสแตนซ์ใหม่
การคัดลอกรหัสมีดังนี้:
วัตถุสาธารณะ newinstance (String className, Object [] args) โยนข้อยกเว้น {
คลาส newOneclass = class.forName (className);
คลาส [] argsclass = คลาสใหม่ [args.length];
สำหรับ (int i = 0, j = args.length; i <j; i ++) {
argsclass [i] = args [i] .getClass ();
-
constructor cons = newoneclass.getConstructor (argsclass);
return cons.newinstance (args);
-
วิธีการที่กล่าวถึงที่นี่คือการดำเนินการคอนสตรัคเตอร์ด้วยพารามิเตอร์เพื่อสร้างอินสแตนซ์ใหม่ หากไม่จำเป็นต้องใช้พารามิเตอร์คุณสามารถใช้ Newoneclass.NewInstance () เพื่อนำไปใช้งานได้โดยตรง
Class Newoneclass = class.forName (className): ขั้นตอนแรกคือการรับคลาสของอินสแตนซ์ที่จะสร้าง
บรรทัดที่ 5 ถึง 9: รับอาร์เรย์คลาสของพารามิเตอร์
Constructor cons = newoneclass.getConstructor (argsclass): รับตัวสร้าง
DENS.NewInstance (ARGS): สร้างอินสแตนซ์ใหม่
6. พิจารณาว่าเป็นตัวอย่างของคลาสที่แน่นอน
การคัดลอกรหัสมีดังนี้:
Public Boolean Isinstance (Object OBJ, Class CLS) {
กลับ cls.isinstance (OBJ);
-
7. รับองค์ประกอบในอาร์เรย์
การคัดลอกรหัสมีดังนี้:
วัตถุสาธารณะ getByArray (อาร์เรย์วัตถุ, ดัชนี int) {
return array.get (อาร์เรย์, ดัชนี);
-