জাভার java.lang.reflect প্যাকেজে getClass() মেথড এবং Class Object Access এর ব্যবহার খুবই গুরুত্বপূর্ণ। এই দুটি ধারণা রিফ্লেকশন ব্যবহারের মূল অংশ, যার মাধ্যমে আপনি ক্লাসের মেটাডেটা এবং মেম্বারগুলোকে রানটাইমে অ্যাক্সেস করতে পারেন।
getClass() মেথড
getClass() একটি ইনস্ট্যান্স মেথড যা Object ক্লাসে ডিফাইন করা আছে এবং এটি যেকোনো অবজেক্টের ক্লাসের তথ্য প্রদান করে। এটি একটি Class অবজেক্ট রিটার্ন করে, যা সেই অবজেক্টের রানটাইম টাইপ সম্পর্কিত তথ্য ধারণ করে।
ব্যবহার:
getClass()মেথডটি অবজেক্টের ক্লাসের তথ্য পাওয়ার জন্য ব্যবহার করা হয়।- এটি
Classক্লাসের একটি অবজেক্ট রিটার্ন করে, যেটি ঐ অবজেক্টের ক্লাস সম্পর্কিত বিভিন্ন তথ্য যেমন নাম, মেথড, কনস্ট্রাক্টর, ফিল্ডস ইত্যাদি সরবরাহ করে।
উদাহরণ:
public class ReflectionExample {
public static void main(String[] args) {
String str = "Hello, World!";
// getClass() মেথড দিয়ে ক্লাসের তথ্য পাওয়া
Class<?> cls = str.getClass();
// ক্লাসের নাম প্রিন্ট করা
System.out.println("Class Name: " + cls.getName());
// ক্লাসের ফিল্ড, মেথড, কনস্ট্রাক্টর ইত্যাদি এক্সপ্লোর করা
System.out.println("Declared Methods:");
for (Method method : cls.getDeclaredMethods()) {
System.out.println(method.getName());
}
}
}
Output:
Class Name: java.lang.String
Declared Methods:
length
charAt
...
Class Object Access
Class অবজেক্ট একটি ক্লাসের মেটাডেটা এবং তার সদস্যদের সম্পর্কে তথ্য ধারণ করে। getClass() মেথড দিয়ে ক্লাসের অবজেক্ট পাওয়া যায়, কিন্তু আপনি Class ক্লাসের বিভিন্ন পদ্ধতি ব্যবহার করে সেই ক্লাসের ফিল্ড, মেথড, কনস্ট্রাক্টর ইত্যাদি এক্সেস করতে পারেন।
Class Object Access এর মাধ্যমে আপনি যা করতে পারেন:
- ক্লাসের নাম পেতে পারেন:
getName()মেথড ব্যবহার করে। - ফিল্ডের তথ্য পেতে পারেন:
getDeclaredFields()মেথড ব্যবহার করে। - মেথডের তথ্য পেতে পারেন:
getDeclaredMethods()মেথড ব্যবহার করে। - কনস্ট্রাক্টরের তথ্য পেতে পারেন:
getDeclaredConstructors()মেথড ব্যবহার করে। - ক্লাসের সুপারক্লাস পেতে পারেন:
getSuperclass()মেথড ব্যবহার করে।
উদাহরণ:
import java.lang.reflect.*;
public class ClassObjectAccessExample {
public static void main(String[] args) {
try {
// Class অবজেক্ট পাওয়া
Class<?> cls = Class.forName("java.util.ArrayList");
// ক্লাসের নাম পাওয়া
System.out.println("Class Name: " + cls.getName());
// ক্লাসের ফিল্ডগুলো পাওয়া
System.out.println("Declared Fields:");
for (Field field : cls.getDeclaredFields()) {
System.out.println(field.getName());
}
// ক্লাসের মেথডগুলো পাওয়া
System.out.println("Declared Methods:");
for (Method method : cls.getDeclaredMethods()) {
System.out.println(method.getName());
}
// ক্লাসের কনস্ট্রাক্টরগুলো পাওয়া
System.out.println("Declared Constructors:");
for (Constructor<?> constructor : cls.getDeclaredConstructors()) {
System.out.println(constructor.getName());
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Output:
Class Name: java.util.ArrayList
Declared Fields:
size
elementData
modCount
Declared Methods:
add
remove
get
...
Declared Constructors:
ArrayList
Class অবজেক্টের মাধ্যমে আরও কিছু গুরুত্বপূর্ণ পদ্ধতি:
getName():- ক্লাসের পূর্ণ নাম (fully qualified name) রিটার্ন করে।
getDeclaredFields():- ক্লাসের সকল ডিক্লেয়ার্ড ফিল্ড (public, private, protected) রিটার্ন করে।
getDeclaredMethods():- ক্লাসের সকল মেথড (public, private, protected) রিটার্ন করে।
getDeclaredConstructors():- ক্লাসের সকল কনস্ট্রাক্টর (public, private, protected) রিটার্ন করে।
getSuperclass():- ক্লাসের সুপারক্লাস (parent class) রিটার্ন করে।
getInterfaces():- ক্লাসের ইন্টারফেসগুলো রিটার্ন করে।
getClass()মেথড আপনাকে রানটাইমে অবজেক্টের ক্লাসের তথ্য প্রাপ্তির সুবিধা দেয়।Classঅবজেক্ট এর মাধ্যমে আপনি ঐ ক্লাসের বিভিন্ন মেম্বার যেমন ফিল্ড, মেথড, কনস্ট্রাক্টর ইত্যাদি অ্যাক্সেস করতে পারেন এবং তাদের সাথে কাজ করতে পারেন।- রিফ্লেকশন জাভাতে শক্তিশালী, কিন্তু এর ব্যবহার পারফরম্যান্স এবং নিরাপত্তা সমস্যা তৈরি করতে পারে, তাই এটি সাবধানে ব্যবহার করা উচিত।
Read more