Reflection – Constructor & Fields | חלק שלישי

היום אני אדבר על רפלקשיין בהקשר של השגת הקונסטרקטור והשדות מתוך אובייקט מסויים.

בסוף המאמר גם העליתי תוכנית לדוגמא.

למעשה כאשר אנחנו משיגים את הקונסטרקטור של אותה מחלקה, ניתן ליצור ממנו אובייקט ובעצם לבצע פעולות עליו.
————————————————————————— Constructor—————————————————————————
1. ראשית כל אנו צריכים להשיג את המחלקה(כמו שראינו בכתבה הקודמת, לינק).
קיימות 2 שיטות:
Class my_class = MyClass.class;
or
Class my_class = Class.forName("com.CrDiv.MyClass"); // Full pkg name!
2. Constructor:
ניתן לקבל את כל הקונסטרקטורים לתוך מערך של קונסטרקטורים, ראה 1.
ניתן לקבל קונסטרקטור ספציפי, ראה 2
חשוב לציין שאםלא נמצא שום קונסטרקטור אזי נזרק אקספשיין
NoSuchMethodException
1. Constructor constructor[] = my_class.getConstructor(); // מחזיר מערך של בנאים
2. Constructor constructor = my_class.getConstructor(String.Class); // קונסטרקטור מסוים שמקבל מחרוזת
3. Constructor Parameters:
ניתן לקבל את הפרמטרים מתוך הקונסטרקטור ע"י פעולה:
Constructor constructor = … // כמו למעלה
Class[] parameterTypes = constructor.getParameterTypes();
4. יצירת אובייקט
החלק החשוב הוא כמובן יצירת אובייקט מתוך המחלקה על מנת שנוכל להשתמש בו
//get constructor that takes a String as argument
Constructor constructor = MyObject.class.getConstructor(String.class);

MyObject myObject = (MyObject)constructor.newInstance("constructor-arg1");

————————————————————————— Fields ———————————————————————————-
1. get Fields
אנו נקבל מערך של שדות שקיימים בתוך המחלקה.
class my_class = .. // obtain class object
Field[] fields = my_class.getFields();
2. Get specific field:
Field field = my_class("somefield");
*יש להשים לב באם השדה לא קיים תזרק שגיאה
NoSuchFieldException
3. get Field Name
Field field = my_class("some_field");
String field_name = field.getName();
4. Field Type
Field field = my_class("some_field");
Object field_type = field.getType();
5. getter and setter – ניתן להשתמש בהם אחרי שהשגנו את השדה
Class my_class= MyClass.class
Field field = my_class.getField("someField");

MyClass objectInstance = new MyClass();

Object value = field.get(objectInstance); // Get value from objectInstance object

field.set(objetInstance, value);

זה סוף החלק השלישי, אני מקווה שזה עזר לכם יותר בהבנה של רפלקשיין ותפקודו.

קוד לדוגמא:

Reflection_Code

מודעות פרסומת
מאת chenreuven פורסם ב-General

להשאיר תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s