জাভার java.lang.reflect প্যাকেজটি আপনাকে Private এবং Public ফিল্ডগুলো অ্যাক্সেস করার সুযোগ দেয়, যা সাধারণত সরাসরি ক্লাসের বাইর থেকে অ্যাক্সেস করা সম্ভব নয়। এটি রিফ্লেকশন প্রক্রিয়ায় হয়, যার মাধ্যমে আপনি ক্লাসের অভ্যন্তরীণ সদস্যদের (ফিল্ড, মেথড, কনস্ট্রাক্টর) সাথে ডাইনামিকভাবে কাজ করতে পারেন।
Public Fields Access:
প্রাইভেট বা পাবলিক, যেকোনো পাবলিক ফিল্ড সরাসরি অ্যাক্সেস করা সম্ভব। আপনি ফিল্ডের নাম দিয়ে তা সরাসরি পেতে পারেন এবং মান পরিবর্তন করতে পারেন।
Private Fields Access:
প্রাইভেট ফিল্ড অ্যাক্সেস করার জন্য প্রথমে আপনাকে সেই ফিল্ডটির জন্য setAccessible(true) মেথড ব্যবহার করতে হবে। এটি প্রাইভেট ফিল্ডগুলোর অ্যাক্সেসের অনুমতি দেয়, যা সাধারণভাবে সরাসরি অ্যাক্সেস করা যায় না।
Private এবং Public Fields Access করার উদাহরণ:
import java.lang.reflect.Field;
class Example {
// Public field
public String publicMessage = "This is a public message";
// Private field
private String privateMessage = "This is a private message";
public Example() {
// Constructor
}
}
public class ReflectionExample {
public static void main(String[] args) throws Exception {
// Example ক্লাসের একটি অবজেক্ট তৈরি
Example obj = new Example();
// Class অবজেক্টে রিফ্লেকশন ব্যবহার করে ফিল্ড অ্যাক্সেস
Class<?> cls = obj.getClass();
// Public ফিল্ডের অ্যাক্সেস
Field publicField = cls.getField("publicMessage"); // public ফিল্ড
System.out.println("Public Field: " + publicField.get(obj)); // পাবলিক ফিল্ডের মান
// Private ফিল্ডের অ্যাক্সেস
Field privateField = cls.getDeclaredField("privateMessage"); // প্রাইভেট ফিল্ড
privateField.setAccessible(true); // প্রাইভেট ফিল্ড অ্যাক্সেস করার জন্য
System.out.println("Private Field: " + privateField.get(obj)); // প্রাইভেট ফিল্ডের মান
// প্রাইভেট ফিল্ডের মান পরিবর্তন করা
privateField.set(obj, "Modified private message");
System.out.println("Modified Private Field: " + privateField.get(obj)); // পরিবর্তিত মান
}
}
কোড বিশ্লেষণ:
- Public Field Access:
getField("publicMessage")মেথডটি পাবলিক ফিল্ডের রিফ্লেকশন ব্যবহারে ফিল্ড অবজেক্ট রিটার্ন করে।- তারপর
publicField.get(obj)ব্যবহার করেpublicMessageফিল্ডের মান সংগ্রহ করা হয়।
- Private Field Access:
getDeclaredField("privateMessage")ব্যবহার করেprivateMessageপ্রাইভেট ফিল্ডের রিফ্লেকশন পাওয়া যায়।privateField.setAccessible(true)দিয়ে ফিল্ডটিকে অ্যাক্সেসযোগ্য করা হয়।- এরপর
privateField.get(obj)ব্যবহার করে প্রাইভেট ফিল্ডের মান অ্যাক্সেস করা হয়।
- Private Field Modification:
privateField.set(obj, "Modified private message")মেথডটি দিয়ে প্রাইভেট ফিল্ডের মান পরিবর্তন করা হয়।- পরিবর্তিত মানটি আবার
privateField.get(obj)দিয়ে আনা হয় এবং প্রিন্ট করা হয়।
বিষয়গুলো লক্ষ্যণীয়:
- Public Fields: পাবলিক ফিল্ড সরাসরি অ্যাক্সেস করা যায়, তাই রিফ্লেকশন ব্যবহারের প্রয়োজন হয় না যদি ফিল্ডটি পাবলিক হয়।
- Private Fields: প্রাইভেট ফিল্ড অ্যাক্সেস করতে
setAccessible(true)মেথডের মাধ্যমে তাদের অ্যাক্সেস নিশ্চিত করতে হয়। এটি নিরাপত্তা ব্যবস্থা (security) ভঙ্গ করতে পারে, তাই ব্যবহারকারীর জন্য সাবধানে করা উচিত। - Public ফিল্ড অ্যাক্সেস সহজ, তবে Private ফিল্ড অ্যাক্সেস করতে আপনাকে
setAccessible(true)মেথড ব্যবহার করতে হবে। - রিফ্লেকশন ব্যবহারে ফিল্ড অ্যাক্সেস করার ক্ষমতা আপনাকে অনেক ফ্লেক্সিবিলিটি প্রদান করে, তবে এর সিকিউরিটি ঝুঁকি এবং পারফরম্যান্স সমস্যা হতে পারে।
Read more