Java রিফ্লেকশন প্যাকেজ (java.lang.reflect) আপনাকে একটি ক্লাসের কনস্ট্রাক্টর (constructor) সম্পর্কে তথ্য জানাতে এবং সেই কনস্ট্রাক্টর ব্যবহার করে ডাইনামিকভাবে অবজেক্ট তৈরি করতে সহায়তা করে। এই প্রক্রিয়ায়, আপনি parameterized constructor এর মাধ্যমে অবজেক্ট তৈরি করতে পারেন, যা কনস্ট্রাক্টরে কিছু প্যারামিটার নেয়।
রিফ্লেকশন ব্যবহার করে parameterized constructor এর মাধ্যমে অবজেক্ট তৈরি করতে আপনাকে নিম্নলিখিত ধাপগুলো অনুসরণ করতে হবে:
- Class অবজেক্ট পাওয়া: প্রথমে আপনাকে যে ক্লাসের কনস্ট্রাক্টর ব্যবহার করতে চান, তার
Classঅবজেক্ট পেতে হবে। - Constructor অবজেক্ট পাওয়া: তারপর
getConstructor()বাgetDeclaredConstructor()মেথড ব্যবহার করে parameterized constructor অ্যাক্সেস করতে হবে। - Object Creation: অবশেষে,
newInstance()মেথড ব্যবহার করে কনস্ট্রাক্টরের মাধ্যমে অবজেক্ট তৈরি করতে হবে।
কোড উদাহরণ:
ধরা যাক, আমাদের একটি Person ক্লাস রয়েছে যা দুটি প্যারামিটার নেয় (একটি String এবং একটি int)।
import java.lang.reflect.*;
class Person {
private String name;
private int age;
// Parameterized constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void displayInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
public class ReflectionConstructorExample {
public static void main(String[] args) throws Exception {
// Person ক্লাসের Class অবজেক্ট পাওয়া
Class<?> cls = Class.forName("Person");
// Parameterized constructor অ্যাক্সেস করা
Constructor<?> constructor = cls.getConstructor(String.class, int.class);
// constructor.newInstance() ব্যবহার করে Object তৈরি
Person person = (Person) constructor.newInstance("John", 25);
// অবজেক্টের মেথড কল করা
person.displayInfo(); // Output: Name: John, Age: 25
}
}
ব্যাখ্যা:
- Class অবজেক্ট পাওয়া:
Class.forName("Person")ব্যবহার করেPersonক্লাসেরClassঅবজেক্ট পাওয়া গেছে। এটি ক্লাসের মেটাডেটা (metadata) অ্যাক্সেস করতে সাহায্য করে।
- Parameterized Constructor অ্যাক্সেস:
cls.getConstructor(String.class, int.class)ব্যবহার করেPersonক্লাসের parameterized কনস্ট্রাক্টরটি পাওয়া হয়েছে, যেটি একটিStringএবং একটিintপ্যারামিটার নেয়।
- Object Creation:
constructor.newInstance("John", 25)ব্যবহার করে আমরাPersonক্লাসের একটি অবজেক্ট তৈরি করেছি, যেখানে"John"এবং25প্যারামিটার হিসেবে পাস করা হয়েছে।
- Method Invocation:
- অবজেক্ট তৈরি হওয়ার পর,
person.displayInfo()কল করে তার তথ্য প্রিন্ট করা হয়েছে।
- অবজেক্ট তৈরি হওয়ার পর,
আরো কিছু মন্তব্য:
- Parameterized Constructor: যদি আপনার কনস্ট্রাক্টর একাধিক প্যারামিটার নেয়, আপনি সেই প্যারামিটারগুলোর টাইপ উল্লেখ করে
getConstructor()মেথড ব্যবহার করতে পারেন। এর মাধ্যমে আপনি সঠিক কনস্ট্রাক্টরটি অ্যাক্সেস করতে পারবেন। - Accessing Private Constructors: আপনি যদি প্রাইভেট কনস্ট্রাক্টর অ্যাক্সেস করতে চান, তবে
getDeclaredConstructor()ব্যবহার করুন এবং পরেsetAccessible(true)মেথডের মাধ্যমে কনস্ট্রাক্টরটিকে অ্যাক্সেসযোগ্য করুন।
প্রাইভেট কনস্ট্রাক্টর অ্যাক্সেস করার উদাহরণ:
class Person {
private String name;
private int age;
// Private constructor
private Person(String name, int age) {
this.name = name;
this.age = age;
}
public void displayInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
public class ReflectionPrivateConstructorExample {
public static void main(String[] args) throws Exception {
// Person ক্লাসের Class অবজেক্ট পাওয়া
Class<?> cls = Class.forName("Person");
// Private parameterized constructor অ্যাক্সেস করা
Constructor<?> constructor = cls.getDeclaredConstructor(String.class, int.class);
constructor.setAccessible(true); // প্রাইভেট কনস্ট্রাক্টর অ্যাক্সেস করার জন্য
// constructor.newInstance() ব্যবহার করে Object তৈরি
Person person = (Person) constructor.newInstance("John", 25);
// অবজেক্টের মেথড কল করা
person.displayInfo(); // Output: Name: John, Age: 25
}
}
Java রিফ্লেকশন ব্যবহার করে parameterized constructor এর মাধ্যমে অবজেক্ট তৈরি করা সম্ভব। Class.forName() এবং getConstructor() মেথড ব্যবহার করে আপনি কনস্ট্রাক্টর অ্যাক্সেস করতে পারেন, এবং newInstance() মেথড দিয়ে অবজেক্ট তৈরি করতে পারেন। এটি আপনাকে ডাইনামিকভাবে ক্লাসের কনস্ট্রাক্টরের মাধ্যমে অবজেক্ট তৈরি করতে সক্ষম করে।
Read more