java.lang.reflect প্যাকেজের মাধ্যমে আপনি জাভার প্রাইভেট এবং পাবলিক মেথডগুলোকে রানটাইমে অ্যাক্সেস এবং ইনভোক করতে পারেন। রিফ্লেকশন ব্যবহার করে প্রাইভেট মেথড এবং পাবলিক মেথড উভয়কেই অ্যাক্সেস করা সম্ভব, তবে এগুলোর অ্যাক্সেসের জন্য আলাদা পদ্ধতি প্রয়োজন।
পাবলিক মেথড অ্যাক্সেস:
যেকোনো ক্লাসের পাবলিক মেথড সরাসরি getMethod() মেথড ব্যবহার করে অ্যাক্সেস করা যায়। এই মেথডটি শুধুমাত্র পাবলিক মেথডগুলো ফেরত দেয়।
প্রাইভেট মেথড অ্যাক্সেস:
প্রাইভেট মেথডের অ্যাক্সেসের জন্য getDeclaredMethod() ব্যবহার করতে হবে এবং setAccessible(true) কল করে মেথডটিকে অ্যাক্সেসিবল করতে হবে, কারণ প্রাইভেট মেথড সাধারণত সরাসরি অ্যাক্সেসযোগ্য নয়।
উদাহরণ: প্রাইভেট এবং পাবলিক মেথড অ্যাক্সেস করা
import java.lang.reflect.*;
class Example {
public void publicMethod() {
System.out.println("Public method called!");
}
private void privateMethod() {
System.out.println("Private method called!");
}
}
public class ReflectionExample {
public static void main(String[] args) {
try {
// Class অবজেক্ট পাওয়া
Class<?> cls = Class.forName("Example");
// অবজেক্ট তৈরি
Object obj = cls.getDeclaredConstructor().newInstance();
// পাবলিক মেথড অ্যাক্সেস করা
Method publicMethod = cls.getMethod("publicMethod");
publicMethod.invoke(obj); // Public method called!
// প্রাইভেট মেথড অ্যাক্সেস করা
Method privateMethod = cls.getDeclaredMethod("privateMethod");
privateMethod.setAccessible(true); // প্রাইভেট মেথড অ্যাক্সেস করার জন্য
privateMethod.invoke(obj); // Private method called!
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- পাবলিক মেথড অ্যাক্সেস:
cls.getMethod("publicMethod"):publicMethodনামের পাবলিক মেথডটি খুঁজে বের করার জন্য।publicMethod.invoke(obj): মেথডটিobjঅবজেক্টে ইনভোক (call) করা হয়।
- প্রাইভেট মেথড অ্যাক্সেস:
cls.getDeclaredMethod("privateMethod"):privateMethodনামের প্রাইভেট মেথডটি খুঁজে বের করার জন্য।privateMethod.setAccessible(true): প্রাইভেট মেথড অ্যাক্সেস করার জন্যsetAccessible(true)ব্যবহার করা হয়েছে।privateMethod.invoke(obj): প্রাইভেট মেথডটিobjঅবজেক্টে ইনভোক করা হয়েছে।
মূল পয়েন্ট:
- পাবলিক মেথড সরাসরি
getMethod()দিয়ে অ্যাক্সেস করা যায়। - প্রাইভেট মেথড অ্যাক্সেস করার জন্য
getDeclaredMethod()ব্যবহার করতে হয় এবংsetAccessible(true)ব্যবহার করে মেথডটিকে অ্যাক্সেসযোগ্য করতে হয়। - রিফ্লেকশন ব্যবহার করে ডাইনামিক কোড এক্সিকিউশন সম্ভব হয়, তবে নিরাপত্তা এবং পারফরম্যান্সের দিক থেকে সাবধান থাকতে হবে, কারণ এই পদ্ধতি কোডের অভ্যন্তরীণ অবস্থা পরিবর্তন করতে পারে।
Content added By
Read more