কোন Class এর Fields Access করা

Fields এর মাধ্যমে Runtime Data Access - জাভা রিফ্লেক্ট প্যাকেজ (Java.reflect Package) - Java Technologies

263

Java তে রিফ্লেকশন (Reflection) ব্যবহার করে আপনি যে কোনও ক্লাসের ফিল্ড (fields) অ্যাক্সেস করতে পারেন, এমনকি ক্লাসের প্রাইভেট (private) ফিল্ডগুলোও। java.lang.reflect.Field ক্লাসটি এর জন্য ব্যবহৃত হয়। রিফ্লেকশন ব্যবহার করে আপনি ক্লাসের ফিল্ডগুলোকে পড়তে, সেট করতে এবং ম্যানিপুলেট করতে পারেন।

Java Reflection দিয়ে ক্লাসের Fields Access করা:

  1. Class Object পাওয়া:
    • প্রথমে, আপনাকে ক্লাসের একটি Class অবজেক্ট পেতে হবে। এটি আপনি Class.forName() বা object.getClass() ব্যবহার করে পেতে পারেন।
  2. Field Access করা:
    • getDeclaredField() অথবা getField() মেথড দিয়ে আপনি ফিল্ড অ্যাক্সেস করতে পারেন।
    • getDeclaredField() দিয়ে আপনি প্রাইভেট ফিল্ডও অ্যাক্সেস করতে পারবেন, তবে সেক্ষেত্রে setAccessible(true) মেথড ব্যবহার করতে হবে।
    • getField() শুধুমাত্র পাবলিক ফিল্ড অ্যাক্সেস করতে পারে।
  3. Field Manipulation:
    • একবার ফিল্ড অ্যাক্সেস করার পর, আপনি get() মেথড দিয়ে ফিল্ডের মান পড়তে পারেন এবং set() মেথড দিয়ে ফিল্ডের মান সেট করতে পারেন।

উদাহরণ:

import java.lang.reflect.*;

class Person {
    private String name;
    public int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void displayInfo() {
        System.out.println("Name: " + name + ", Age: " + age);
    }
}

public class ReflectionFieldExample {
    public static void main(String[] args) throws Exception {
        // Person ক্লাসের একটি অবজেক্ট তৈরি
        Person person = new Person("John", 25);

        // Person ক্লাসের Class অবজেক্ট পাওয়া
        Class<?> cls = person.getClass();

        // Private ফিল্ড (name) অ্যাক্সেস করা
        Field privateField = cls.getDeclaredField("name");
        privateField.setAccessible(true);  // প্রাইভেট ফিল্ডে অ্যাক্সেস পেতে

        // Private ফিল্ডের মান পড়া
        String nameValue = (String) privateField.get(person);
        System.out.println("Private Field 'name': " + nameValue);

        // Public ফিল্ড (age) অ্যাক্সেস করা
        Field publicField = cls.getField("age");

        // Public ফিল্ডের মান পড়া
        int ageValue = (int) publicField.get(person);
        System.out.println("Public Field 'age': " + ageValue);

        // Public ফিল্ডের মান পরিবর্তন করা
        publicField.set(person, 30);  // age কে 30 সেট করা

        // অবজেক্টের তথ্য পুনরায় প্রদর্শন করা
        person.displayInfo();  // Name: John, Age: 30
    }
}

কোডের ব্যাখ্যা:

  1. Person ক্লাসের ফিল্ড অ্যাক্সেস:
    • name একটি প্রাইভেট ফিল্ড এবং age একটি পাবলিক ফিল্ড।
    • রিফ্লেকশন ব্যবহার করে, আমরা getDeclaredField("name") দিয়ে name ফিল্ড অ্যাক্সেস করেছি এবং setAccessible(true) মেথড ব্যবহার করেছি যাতে প্রাইভেট ফিল্ডে অ্যাক্সেস পাওয়া যায়।
    • getField("age") ব্যবহার করে পাবলিক ফিল্ড age অ্যাক্সেস করা হয়েছে।
  2. ফিল্ডের মান পড়া:
    • privateField.get(person) এবং publicField.get(person) মেথড দিয়ে ফিল্ডের মান পড়া হয়েছে। এটি রানটাইমে ক্লাসের ফিল্ডের মানের মূল্য জানাতে সহায়তা করে।
  3. ফিল্ডের মান পরিবর্তন:
    • publicField.set(person, 30) মেথড দিয়ে age ফিল্ডের মান পরিবর্তন করা হয়েছে। এটি age এর মান ২৫ থেকে ৩০ সেট করেছে।

এখন, আমরা অন্যান্য কার্যক্রমও করতে পারি:

  • ফিল্ডের ধরন চেক করা: getType() মেথড ব্যবহার করে ফিল্ডের ডাটা টাইপ জানতে পারেন।
  • ফিল্ডের অ্যাক্সেস মডিফায়ার: getModifiers() মেথড ব্যবহার করে ফিল্ডের মডিফায়ার যেমন private, public, static ইত্যাদি চেক করতে পারেন।

Java রিফ্লেকশন ব্যবহার করে আপনি যেকোনো ক্লাসের ফিল্ড অ্যাক্সেস করতে পারেন, এমনকি প্রাইভেট ফিল্ডও। java.lang.reflect.Field ক্লাস এবং এর get(), set(), getDeclaredField(), getField() ইত্যাদি মেথড ব্যবহার করে আপনি ফিল্ডের মান পড়তে এবং সেট করতে পারবেন। তবে, রিফ্লেকশন ব্যবহার করার সময় সতর্ক থাকতে হবে কারণ এটি পারফরম্যান্সের উপর প্রভাব ফেলতে পারে এবং সিকিউরিটি ঝুঁকি সৃষ্টি করতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...