java.lang.reflect প্যাকেজের Class ক্লাসটি জাভায় রিফ্লেকশন প্রক্রিয়ায় গুরুত্বপূর্ণ ভূমিকা পালন করে। এই ক্লাসের মাধ্যমে আপনি একটি ক্লাসের তথ্য জানতে এবং তার ফিল্ড, মেথড, কনস্ট্রাক্টর ইত্যাদি অ্যাক্সেস করতে পারেন। নিচে Class ক্লাসের কিছু গুরুত্বপূর্ণ মেথডের আলোচনা করা হলো:
১. forName() মেথড:
- উদ্দেশ্য: এই মেথডটি একটি ক্লাসের নাম (স্ট্রিং আকারে) গ্রহণ করে এবং সেই ক্লাসের একটি
Classঅবজেক্ট রিটার্ন করে। - এটি ব্যবহার করে আপনি ডাইনামিকভাবে একটি ক্লাস লোড করতে পারেন।
সিনট্যাক্স:
Class<?> cls = Class.forName("com.example.MyClass");
ব্যবহার:
public class Test {
public static void main(String[] args) {
try {
Class<?> cls = Class.forName("java.util.ArrayList"); // ArrayList ক্লাস লোড
System.out.println("Class loaded: " + cls.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
২. newInstance() মেথড:
- উদ্দেশ্য: এই মেথডটি একটি ক্লাসের ডিফল্ট কনস্ট্রাক্টর ব্যবহার করে একটি নতুন অবজেক্ট তৈরি করে। তবে, এটি ডিপ্রিকেটেড (deprecated) হয়েছে এবং এখন
Constructor.newInstance()মেথডটি ব্যবহার করা উচিত। - এটি ব্যবহার করে আপনি একটি ক্লাসের নতুন ইনস্ট্যান্স তৈরি করতে পারেন।
সিনট্যাক্স:
T obj = (T) cls.newInstance();
ব্যবহার:
public class Test {
public static void main(String[] args) {
try {
Class<?> cls = Class.forName("java.util.ArrayList"); // ArrayList ক্লাস লোড
Object obj = cls.newInstance(); // নতুন অবজেক্ট তৈরি
System.out.println("Object created: " + obj);
} catch (Exception e) {
e.printStackTrace();
}
}
}
৩. getMethods() মেথড:
- উদ্দেশ্য: এই মেথডটি একটি ক্লাসের সকল পাবলিক মেথডের একটি অ্যারে রিটার্ন করে, যেগুলি সেই ক্লাসের প্যারেন্ট ক্লাস থেকে ও উত্তরাধিকারসূত্রে পাওয়া যেতে পারে।
- এটি শুধুমাত্র পাবলিক মেথডগুলো ফেরত দেয়, প্রাইভেট বা প্রটেক্টেড মেথডগুলোর জন্য
getDeclaredMethods()ব্যবহার করা উচিত।
সিনট্যাক্স:
Method[] methods = cls.getMethods();
ব্যবহার:
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) {
try {
Class<?> cls = Class.forName("java.util.ArrayList");
Method[] methods = cls.getMethods(); // পাবলিক মেথডগুলোর অ্যারে
for (Method method : methods) {
System.out.println(method.getName());
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
৪. getFields() মেথড:
- উদ্দেশ্য: এই মেথডটি একটি ক্লাসের সকল পাবলিক ফিল্ডের একটি অ্যারে রিটার্ন করে।
getFields()শুধুমাত্র পাবলিক ফিল্ডগুলোকেই ফেরত দেয়। প্রাইভেট বা প্রটেক্টেড ফিল্ড অ্যাক্সেস করার জন্যgetDeclaredFields()ব্যবহার করা উচিত। - এটি ক্লাসের সকল পাবলিক ফিল্ডের নাম, টাইপ এবং অন্যান্য তথ্য রিটার্ন করে।
সিনট্যাক্স:
Field[] fields = cls.getFields();
ব্যবহার:
import java.lang.reflect.Field;
public class Test {
public static void main(String[] args) {
try {
Class<?> cls = Class.forName("java.util.ArrayList");
Field[] fields = cls.getFields(); // পাবলিক ফিল্ডগুলোর অ্যারে
for (Field field : fields) {
System.out.println(field.getName());
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
উদাহরণ: Class ক্লাসের মেথডগুলির ব্যবহার
import java.lang.reflect.*;
public class ReflectionExample {
public static void main(String[] args) {
try {
// forName() ব্যবহার করে ক্লাস লোড করা
Class<?> cls = Class.forName("java.util.ArrayList");
// newInstance() ব্যবহার করে অবজেক্ট তৈরি
Object obj = cls.newInstance();
System.out.println("Object created: " + obj);
// getMethods() ব্যবহার করে পাবলিক মেথডসমূহ
Method[] methods = cls.getMethods();
System.out.println("Public methods:");
for (Method method : methods) {
System.out.println(method.getName());
}
// getFields() ব্যবহার করে পাবলিক ফিল্ডসমূহ
Field[] fields = cls.getFields();
System.out.println("Public fields:");
for (Field field : fields) {
System.out.println(field.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Class ক্লাসটি জাভায় রিফ্লেকশন অপারেশনগুলোর জন্য অত্যন্ত গুরুত্বপূর্ণ একটি উপাদান। forName(), newInstance(), getMethods(), এবং getFields() মেথডগুলি ক্লাসের বিভিন্ন তথ্য অ্যাক্সেস এবং ম্যানিপুলেশন করতে সহায়ক। তবে, newInstance() মেথডটি এখন ডিপ্রিকেটেড, তাই এখন Constructor.newInstance() ব্যবহৃত হয় নতুন ইনস্ট্যান্স তৈরি করার জন্য।
Read more