المبدأ: يمكن لانعكاس Java الحصول على اسم السمة، ثم استدعاء أسلوب الفئة من خلال الاستدعاء.
على سبيل المثال، هناك خاصية تسمى userName، وتكتب هذه الفئة طريقة تسمى getUserName، ويتم استدعاء طريقة getUserName من خلال الاستدعاء.
الرمز هو كما يلي
انسخ رمز الكود كما يلي:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
قاعدة معلمات الطبقة العامة
{
/**
* احصل على حقل الفصل وخريطة القيمة
* @يعود
*/
الخريطة العامة<String, String> getClassInfo()
{
Map<String,String> fieldAndValues = new HashMap<String, String>();
الحقل [] الحقول = this.getClass().getDeclaredFields();
ل(int i=0;i<fields.length;i++)
{
الحقل f = الحقول[i];
قيمة السلسلة = getFieldValue(this,f.getName()).toString();
fieldAndValues.put(f.getName(),value);
}
إرجاع الحقول والقيم؛
}
سلسلة خاصة getFieldValue (مالك الكائن، اسم حقل السلسلة)
{
إرجاع invoceMethod(owner, fieldName,null).toString();
}
/**
*
* تنفيذ طريقة getField لحقل معين
*
* فئة مالكparam
* @param fieldName اسم السمة للفئة
* معلماتparam args، القيمة الافتراضية فارغة
* @يعود
*/
كائن خاص invoceMethod (مالك الكائن، اسم حقل السلسلة، وسيطة الكائن [])
{
Class<? Extends Object> OwnerClass = Owner.getClass();
// اسم الحقل -> اسم الحقل
String MethodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
طريقة الطريقة = فارغة؛
يحاول
{
الطريقة = OwnerClass.getMethod("get" +methodName);
}
قبض (SecurityException ه)
{
//e.printStackTrace();
}
قبض على (NoSuchMethodException ه)
{
// e.printStackTrace();
يعود ""؛
}
//استدعاء getMethod
يحاول
{
طريقة الإرجاع. استدعاء (مالك)؛
}
قبض (الاستثناء ه)
{
يعود ""؛
}
}
}
اكتب فئة المستخدم التي ترث من ParameterBase واكتب رمز الاختبار
انسخ رمز الكود كما يلي:
يقوم مستخدم الفئة العامة بتوسيع ParameterBase
{
اسم مستخدم السلسلة؛
سلسلة تمرير العالم؛
سلسلة عامة getUserName ()
{
إرجاع اسم المستخدم؛
}
setUserName باطلة عامة (اسم مستخدم السلسلة)
{
this.userName = userName;
}
سلسلة عامة getPassWorld()
{
العودة passWorld؛
}
مجموعة الفراغ العام PassWorld (سلسلة passWorld)
{
this.passWorld = passWorld;
}
الفراغ العام الثابت الرئيسي (String[] args)
{
المستخدم u = مستخدم جديد ()؛
u.passWorld = "123";
u.userName = "aaaaa";
System.out.println(u.getClassInfo().toString());
}
}
مخرجات البرنامج
انسخ رمز الكود كما يلي:
{passWorld=123، اسم المستخدم=aaaaa}