জাভা রিফ্লেকশন (Reflection) প্যাকেজের মধ্যে getMethod() এবং getDeclaredMethod() মেথড দুটি ব্যবহৃত হয় ক্লাসের মেথড অ্যাক্সেস করার জন্য। এই মেথডগুলো রিফ্লেকশনের মাধ্যমে কোনও ক্লাসের মেথডগুলোর তথ্য পাওয়া এবং তাদের কল করার জন্য ব্যবহৃত হয়।
1. getMethod() মেথড
getMethod() মেথডটি একটি ক্লাসের পাবলিক মেথড অ্যাক্সেস করতে ব্যবহৃত হয়। এটি শুধুমাত্র পাবলিক মেথড গুলোকে রিটার্ন করে। যদি আপনি কোনও পাবলিক মেথডের সাথে কাজ করতে চান তবে getMethod() ব্যবহার করতে হবে।
সিনট্যাক্স:
Method getMethod(String methodName, Class<?>... parameterTypes)
methodName: মেথডের নাম।parameterTypes: মেথডটির প্যারামিটার টাইপ (যদি থাকে)।
এটি যদি সঠিকভাবে পাওয়া যায়, তবে এটি সেই মেথডের একটি Method অবজেক্ট রিটার্ন করবে, যা আপনি পরে ইনভোকেশন করতে পারবেন।
উদাহরণ:
import java.lang.reflect.Method;
public class Example {
public void printMessage(String message) {
System.out.println("Message: " + message);
}
public static void main(String[] args) throws Exception {
Example obj = new Example();
// ক্লাসের পদ্ধতি (Method) পাওয়া
Method method = Example.class.getMethod("printMessage", String.class);
// মেথডটি ইনভোকেশন
method.invoke(obj, "Hello, Reflection!");
}
}
Output:
Message: Hello, Reflection!
2. getDeclaredMethod() মেথড
getDeclaredMethod() মেথডটি একটি ক্লাসের সব ধরনের মেথড (পাবলিক, প্রাইভেট, প্রটেক্টেড) অ্যাক্সেস করতে ব্যবহৃত হয়। এটি শুধু পাবলিক নয়, ক্লাসের সমস্ত মেথড (যে ধরনেরই হোক) রিটার্ন করে। সাধারণত, যদি আপনি প্রাইভেট বা প্রটেক্টেড মেথড অ্যাক্সেস করতে চান তবে getDeclaredMethod() ব্যবহার করবেন।
সিনট্যাক্স:
Method getDeclaredMethod(String methodName, Class<?>... parameterTypes)
methodName: মেথডের নাম।parameterTypes: মেথডটির প্যারামিটার টাইপ (যদি থাকে)।
এটি ক্লাসের সব ধরনের মেথড প্রদান করবে, এমনকি প্রাইভেট মেথডগুলোও।
উদাহরণ:
import java.lang.reflect.Method;
public class Example {
private void privateMethod() {
System.out.println("This is a private method");
}
public static void main(String[] args) throws Exception {
Example obj = new Example();
// প্রাইভেট মেথড পাওয়া
Method method = Example.class.getDeclaredMethod("privateMethod");
// প্রাইভেট মেথডের অ্যাক্সেস সেশন ওপেন করা
method.setAccessible(true);
// মেথড ইনভোকেশন
method.invoke(obj);
}
}
Output:
This is a private method
পার্থক্য: getMethod() এবং getDeclaredMethod()
| বৈশিষ্ট্য | getMethod() | getDeclaredMethod() |
|---|---|---|
| অ্যাক্সেসযোগ্যতা | শুধুমাত্র পাবলিক মেথড। | সব ধরনের মেথড (পাবলিক, প্রাইভেট, প্রটেক্টেড)। |
| মেথড অনুসন্ধান | পাবলিক মেথডগুলি অনুসন্ধান করে। | সমস্ত মেথড (পাবলিক, প্রাইভেট, প্রটেক্টেড) অনুসন্ধান করে। |
| ব্যবহৃত ক্ষেত্রে | সাধারণত পাবলিক মেথডের জন্য। | প্রাইভেট মেথড বা যেকোনো মেথডের জন্য। |
সঠিক ব্যবহার:
- যদি আপনি কেবল পাবলিক মেথডগুলি অ্যাক্সেস করতে চান, তবে
getMethod()ব্যবহার করুন। - যদি আপনি প্রাইভেট বা অন্য ধরনের মেথড অ্যাক্সেস করতে চান, তবে
getDeclaredMethod()ব্যবহার করুন। getMethod()শুধুমাত্র পাবলিক মেথডের অ্যাক্সেস প্রদান করে এবং এটি সাধারণত ব্যবহার করা হয় যখন আপনি ক্লাসের পাবলিক ইন্টারফেসের অংশ হিসেবে মেথড ইনভোকেশন করতে চান।getDeclaredMethod()সমস্ত ধরনের মেথড (পাবলিক, প্রাইভেট, প্রটেক্টেড) অ্যাক্সেস করতে দেয় এবং এটি বিশেষত প্রাইভেট মেথডের সাথে কাজ করতে ব্যবহৃত হয়।
এই দুইটি মেথড রিফ্লেকশন ব্যবহারের মাধ্যমে কোডের ফ্লেক্সিবিলিটি এবং ডাইনামিক আচরণ বাড়াতে সাহায্য করে।
Read more