السلام عليكم
ماهو Reflection ؟
هي طريقه برمجيه لتراقب أو تعدل على سلوك برنامجك وقت التنفيذ ..
كلنا باستطاعتنا التحكم في برامجنا ولكن عندما تريد ان تراقب او ان تعدل وقت تنفيذ برنامجك في
JVM فإن هذا يعتبر مستحيلاً بدون Reflection اتحدث بالطبع على طريقه جافاويه أو Pure Java context
وبدون Third Party classes مثل BCEL
قبل اي شئ لك ان تتخيل المساوئ والمحاسن لهذه الطريقه بامكانك ان تجعل برنامجك اداء جيد وبامكانك ان تجعله اداء اسوأ
كل ذلك يعتمد على طريقتك في استخدام reflection
في هذا الدرس سأتطرق باختصار إلى :
التعامل مع الكلاس
التعامل مع constructor
التعامل مع الmethods
التعامل مع ال fields
التعامل مع modifiers
التعامل مع الكلاس
import java.lang.reflect.*;
class B{
}
class A extends B{
String str;
public void setStr(String str) {
this.str = str;
}
public String getStr() {
return str;
}
public A(String str){
setStr(str);
}
public String toString() {
return new String(str);
}
}
class Test {
public static void main(String args[]) throws Exception{
Class c=Class.forName("A");
System.out.println("Class Name : "+c.getName());
System.out.println("Super Class Name : "+c.getSuperclass());
}
} Class c=Class.forName("A");كل كلاس ينفذ في JVM له اوبجكت من الكلاس Class
وبالتالي نحن نطلب انشاء اوبجكت ان لم يكن موجوداً للكلاس A او ريفرنس له ان كان موجود
بالطبع تستطيع اعطائه الطريق الكامل للكلاس ( إسم الباكج ..إلخ )
التعامل مع الconstructors :
import java.lang.reflect.*;
class B{
}
class A extends B{
String str;
public void setStr(String str) {
this.str = str;
}
public String getStr() {
return str;
}
public A(String str){
setStr(str);
}
public String toString() {
return new String(str);
}
}
class Test {
public static void main(String args[]) throws Exception{
Class c=Class.forName("A");
Constructor constructor=c.getConstructor(new Class[]{String.class});
Object[] arguments=new Object[]{"arabteam2000"};
System.out.println( constructor.newInstance(arguments));
}
} Constructor constructor=c.getConstructor(new Class[]{String.class});تحدد أنواع المدخلات للكونستركتر وهنا لدينا كونستركتر وحيد ويقبل ارقيومنت واحد من نوع String
لإنشاء اوبجكت كل ماعليك هو استدعاء الداله newInstance من الكونستركتر اللي تبيه وتمرر لها مجموعة أرقيومنت وفي مثالنا أرسلنا جملة arabteam2000 لإنشاء اوبجكت من الكلاس A
طبعا بامكانك استخدام اكثر من كونستركتر وانشاء اكثر من اوبجكت

