หลักการ: การสะท้อนของ Java สามารถรับชื่อของแอตทริบิวต์แล้วเรียกเมธอดของคลาสผ่านการเรียกใช้
ตัวอย่างเช่น มีคุณสมบัติชื่อ userName คลาสนี้เขียนเมธอดชื่อ getUserName และเมธอด getUserName ถูกเรียกผ่านการเรียกใช้
รหัสมีดังนี้
คัดลอกรหัสรหัส ดังต่อไปนี้:
นำเข้า java.lang.reflect.Field;
นำเข้า java.lang.reflect.Method;
นำเข้า java.util.HashMap;
นำเข้า java.util.Map;
ParameterBase ระดับสาธารณะ
-
-
* รับฟิลด์คลาสและแผนที่ค่า
* @กลับ
-
แผนที่สาธารณะ <String, String> getClassInfo()
-
แผนที่<String,String> fieldsAndValues = new HashMap<String, String>();
ฟิลด์ [] ฟิลด์ = this.getClass().getDeclaredFields();
สำหรับ(int i=0; i< fields.length; i++)
-
ฟิลด์ f = ฟิลด์[i];
ค่าสตริง = getFieldValue(this,f.getName()).toString();
fieldsAndValues.put(f.getName(),ค่า);
-
ส่งคืนฟิลด์ AndValues;
-
สตริงส่วนตัว getFieldValue (เจ้าของวัตถุ, ชื่อฟิลด์สตริง)
-
กลับ invokeMethod (เจ้าของ fieldName,null).toString();
-
-
-
* ดำเนินการเมธอด getField ของบางฟิลด์
-
* คลาสเจ้าของ @param
* ชื่อแอตทริบิวต์ @param fieldName ของคลาส
* พารามิเตอร์ @param args ค่าเริ่มต้นคือ null
* @กลับ
-
วัตถุส่วนตัว invokeMethod (เจ้าของวัตถุ, ชื่อฟิลด์สตริง, วัตถุ [] args)
-
คลาส<? ขยายวัตถุ> OwnerClass = Owner.getClass();
//ชื่อฟิลด์ -> ชื่อฟิลด์
methodName สตริง = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
วิธีวิธี = null;
พยายาม
-
method = OwnerClass.getMethod("get" + methodName);
-
จับ (SecurityException e)
-
//e.printStackTrace();
-
จับ (NoSuchMethodException จ)
-
// e.printStackTrace();
กลับ "";
-
//เรียกใช้ getMethod
พยายาม
-
return method.inurge (เจ้าของ);
-
จับ (ยกเว้น e)
-
กลับ "";
-
-
-
เขียนคลาส User ที่สืบทอดมาจาก ParameterBase และเขียนโค้ดทดสอบ
คัดลอกรหัสรหัส ดังต่อไปนี้:
ผู้ใช้คลาสสาธารณะขยาย ParameterBase
-
ชื่อผู้ใช้สตริง;
สตริง passWorld;
สตริงสาธารณะ getUserName()
-
ส่งคืนชื่อผู้ใช้;
-
โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง)
-
this.userName = ชื่อผู้ใช้;
-
สตริงสาธารณะ getPassWorld()
-
กลับผ่านโลก;
-
โมฆะสาธารณะ setPassWorld (สตริง passWorld)
-
this.passWorld = passWorld;
-
โมฆะสาธารณะคง main (String [] args)
-
ผู้ใช้ u = ผู้ใช้ใหม่ ();
u.passWorld = "123";
u.userName = "aaaa";
System.out.println(u.getClassInfo().toString());
-
-
เอาท์พุทโปรแกรม
คัดลอกรหัสรหัส ดังต่อไปนี้:
{passWorld=123, ชื่อผู้ใช้=aaaaaa}