Java তে রিফ্লেকশন (Reflection) ব্যবহার করে আপনি যে কোনও ক্লাসের ফিল্ড (fields) অ্যাক্সেস করতে পারেন, এমনকি ক্লাসের প্রাইভেট (private) ফিল্ডগুলোও। java.lang.reflect.Field ক্লাসটি এর জন্য ব্যবহৃত হয়। রিফ্লেকশন ব্যবহার করে আপনি ক্লাসের ফিল্ডগুলোকে পড়তে, সেট করতে এবং ম্যানিপুলেট করতে পারেন।
Java Reflection দিয়ে ক্লাসের Fields Access করা:
- Class Object পাওয়া:
- প্রথমে, আপনাকে ক্লাসের একটি
Classঅবজেক্ট পেতে হবে। এটি আপনিClass.forName()বাobject.getClass()ব্যবহার করে পেতে পারেন।
- প্রথমে, আপনাকে ক্লাসের একটি
- Field Access করা:
getDeclaredField()অথবাgetField()মেথড দিয়ে আপনি ফিল্ড অ্যাক্সেস করতে পারেন।getDeclaredField()দিয়ে আপনি প্রাইভেট ফিল্ডও অ্যাক্সেস করতে পারবেন, তবে সেক্ষেত্রেsetAccessible(true)মেথড ব্যবহার করতে হবে।getField()শুধুমাত্র পাবলিক ফিল্ড অ্যাক্সেস করতে পারে।
- Field Manipulation:
- একবার ফিল্ড অ্যাক্সেস করার পর, আপনি
get()মেথড দিয়ে ফিল্ডের মান পড়তে পারেন এবংset()মেথড দিয়ে ফিল্ডের মান সেট করতে পারেন।
- একবার ফিল্ড অ্যাক্সেস করার পর, আপনি
উদাহরণ:
import java.lang.reflect.*;
class Person {
private String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void displayInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
public class ReflectionFieldExample {
public static void main(String[] args) throws Exception {
// Person ক্লাসের একটি অবজেক্ট তৈরি
Person person = new Person("John", 25);
// Person ক্লাসের Class অবজেক্ট পাওয়া
Class<?> cls = person.getClass();
// Private ফিল্ড (name) অ্যাক্সেস করা
Field privateField = cls.getDeclaredField("name");
privateField.setAccessible(true); // প্রাইভেট ফিল্ডে অ্যাক্সেস পেতে
// Private ফিল্ডের মান পড়া
String nameValue = (String) privateField.get(person);
System.out.println("Private Field 'name': " + nameValue);
// Public ফিল্ড (age) অ্যাক্সেস করা
Field publicField = cls.getField("age");
// Public ফিল্ডের মান পড়া
int ageValue = (int) publicField.get(person);
System.out.println("Public Field 'age': " + ageValue);
// Public ফিল্ডের মান পরিবর্তন করা
publicField.set(person, 30); // age কে 30 সেট করা
// অবজেক্টের তথ্য পুনরায় প্রদর্শন করা
person.displayInfo(); // Name: John, Age: 30
}
}
কোডের ব্যাখ্যা:
- Person ক্লাসের ফিল্ড অ্যাক্সেস:
nameএকটি প্রাইভেট ফিল্ড এবংageএকটি পাবলিক ফিল্ড।- রিফ্লেকশন ব্যবহার করে, আমরা
getDeclaredField("name")দিয়েnameফিল্ড অ্যাক্সেস করেছি এবংsetAccessible(true)মেথড ব্যবহার করেছি যাতে প্রাইভেট ফিল্ডে অ্যাক্সেস পাওয়া যায়। getField("age")ব্যবহার করে পাবলিক ফিল্ডageঅ্যাক্সেস করা হয়েছে।
- ফিল্ডের মান পড়া:
privateField.get(person)এবংpublicField.get(person)মেথড দিয়ে ফিল্ডের মান পড়া হয়েছে। এটি রানটাইমে ক্লাসের ফিল্ডের মানের মূল্য জানাতে সহায়তা করে।
- ফিল্ডের মান পরিবর্তন:
publicField.set(person, 30)মেথড দিয়েageফিল্ডের মান পরিবর্তন করা হয়েছে। এটিageএর মান ২৫ থেকে ৩০ সেট করেছে।
এখন, আমরা অন্যান্য কার্যক্রমও করতে পারি:
- ফিল্ডের ধরন চেক করা:
getType()মেথড ব্যবহার করে ফিল্ডের ডাটা টাইপ জানতে পারেন। - ফিল্ডের অ্যাক্সেস মডিফায়ার:
getModifiers()মেথড ব্যবহার করে ফিল্ডের মডিফায়ার যেমনprivate,public,staticইত্যাদি চেক করতে পারেন।
Java রিফ্লেকশন ব্যবহার করে আপনি যেকোনো ক্লাসের ফিল্ড অ্যাক্সেস করতে পারেন, এমনকি প্রাইভেট ফিল্ডও। java.lang.reflect.Field ক্লাস এবং এর get(), set(), getDeclaredField(), getField() ইত্যাদি মেথড ব্যবহার করে আপনি ফিল্ডের মান পড়তে এবং সেট করতে পারবেন। তবে, রিফ্লেকশন ব্যবহার করার সময় সতর্ক থাকতে হবে কারণ এটি পারফরম্যান্সের উপর প্রভাব ফেলতে পারে এবং সিকিউরিটি ঝুঁকি সৃষ্টি করতে পারে।
Read more