Reflection এর মাধ্যমে কোন Class এর Interface Access করা

Interfaces এবং Superclasses Access - জাভা রিফ্লেক্ট প্যাকেজ (Java.reflect Package) - Java Technologies

330

জাভা রিফ্লেকশন (Reflection) একটি শক্তিশালী ফিচার যা আপনাকে ক্লাস, মেথড, ফিল্ড, এবং ইন্টারফেস সম্পর্কে রানটাইমে তথ্য অর্জন করতে দেয়। ইন্টারফেস হলো একটি abstract type যা একাধিক ক্লাসের জন্য কমন অপারেশন নির্ধারণ করে, কিন্তু কোনো কার্যকর বাস্তবায়ন দেয় না। রিফ্লেকশন ব্যবহার করে আপনি একটি ক্লাসের ইন্টারফেস বা ক্লাসের সাথে যুক্ত ইন্টারফেসগুলি রানটাইমে অ্যাক্সেস এবং প্রসেস করতে পারেন।

কিভাবে Reflection দিয়ে একটি Class এর Interface Access করা হয়?

রিফ্লেকশন ব্যবহার করে একটি ক্লাসের ইন্টারফেস অ্যাক্সেস করতে হলে আপনাকে getInterfaces() মেথড ব্যবহার করতে হবে। এই মেথডটি আপনাকে একটি অ্যারে প্রদান করে যেটি সেই ক্লাসের ইন্টারফেসগুলো ধারণ করে।

উদাহরণ:

ধরা যাক, আমাদের একটি Car ক্লাস রয়েছে, যা Vehicle এবং Automobile নামের দুটি ইন্টারফেস বাস্তবায়ন করেছে। আমরা রিফ্লেকশন ব্যবহার করে এই ক্লাসের ইন্টারফেসগুলো অ্যাক্সেস করব।

import java.lang.reflect.*;

interface Vehicle {
    void start();
    void stop();
}

interface Automobile {
    void drive();
}

class Car implements Vehicle, Automobile {
    @Override
    public void start() {
        System.out.println("Car started.");
    }

    @Override
    public void stop() {
        System.out.println("Car stopped.");
    }

    @Override
    public void drive() {
        System.out.println("Car is driving.");
    }
}

public class ReflectionExample {
    public static void main(String[] args) {
        try {
            // Car ক্লাসের রিফ্লেকশন অবজেক্ট পেতে
            Class<?> clazz = Car.class;

            // getInterfaces() মেথড ব্যবহার করে ক্লাসের ইন্টারফেসগুলি অ্যাক্সেস করা
            Class<?>[] interfaces = clazz.getInterfaces();

            // সমস্ত ইন্টারফেস প্রিন্ট করা
            System.out.println("Interfaces implemented by " + clazz.getName() + ":");
            for (Class<?> iface : interfaces) {
                System.out.println(iface.getName());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

আউটপুট:

Interfaces implemented by Car:
Vehicle
Automobile

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

  1. Vehicle এবং Automobile ইন্টারফেস:
    • Vehicle ইন্টারফেসে দুটি মেথড (start() এবং stop()) রয়েছে।
    • Automobile ইন্টারফেসে একটি মেথড (drive()) রয়েছে।
  2. Car ক্লাস:
    • Car ক্লাসটি Vehicle এবং Automobile দুটি ইন্টারফেসের বাস্তবায়ন প্রদান করেছে।
    • ক্লাসটি start(), stop(), এবং drive() মেথডগুলির বাস্তবায়ন করেছে।
  3. getInterfaces() মেথড:
    • clazz.getInterfaces() মেথডটি Car ক্লাসের সাথে যুক্ত সমস্ত ইন্টারফেসের তালিকা প্রদান করে। এই মেথডটি একটি Class<?>[] অ্যারে রিটার্ন করে, যাতে ওই ক্লাসের সকল ইন্টারফেস থাকে।
  4. রিফ্লেকশন ব্যবহার:
    • রিফ্লেকশন ব্যবহার করে আমরা Car.class.getInterfaces() মেথডটি কল করেছি এবং এর মাধ্যমে Car ক্লাসের ইন্টারফেসগুলোর নাম প্রিন্ট করেছি।

getInterfaces() এবং getSuperclass() এর মধ্যে পার্থক্য:

  • getInterfaces(): এটি একটি ক্লাস বা ইন্টারফেসের সমস্ত ইন্টারফেস অ্যাক্সেস করতে ব্যবহৃত হয়। এটি শুধুমাত্র সেই ইন্টারফেসগুলো রিটার্ন করে যা ক্লাসের সাথে যুক্ত।
  • getSuperclass(): এটি একটি ক্লাসের সুপারক্লাস (বেস ক্লাস) রিটার্ন করে। সুপারক্লাসের ইন্টারফেস অ্যাক্সেস করতে আপনাকে getInterfaces() ব্যবহার করতে হবে।

মাল্টিপল ইন্টারফেস এক্সটেনশন:

  • একাধিক ইন্টারফেস বাস্তবায়নকারী ক্লাসের জন্য, আপনি getInterfaces() ব্যবহার করে সমস্ত ইন্টারফেস একসাথে অ্যাক্সেস করতে পারেন, যেমনটি উপরের উদাহরণে Car ক্লাসের জন্য দেখানো হয়েছে।

isInterface() মেথডের ব্যবহার:

রিফ্লেকশন ব্যবহার করে আপনি একটি নির্দিষ্ট Class অবজেক্টের মাধ্যমে এটি যাচাই করতে পারেন যে এটি একটি ইন্টারফেস কিনা। এর জন্য isInterface() মেথডটি ব্যবহার করা হয়।

public class InterfaceCheckExample {
    public static void main(String[] args) {
        try {
            // Car ক্লাসের রিফ্লেকশন অবজেক্ট পেতে
            Class<?> clazz = Car.class;

            // getInterfaces() মেথড ব্যবহার করে ক্লাসের ইন্টারফেসগুলির অ্যারে পেতে
            Class<?>[] interfaces = clazz.getInterfaces();

            // প্রতিটি ইন্টারফেস পরীক্ষা করা
            for (Class<?> iface : interfaces) {
                if (iface.isInterface()) {
                    System.out.println(iface.getName() + " is an interface.");
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

আউটপুট:

Vehicle is an interface.
Automobile is an interface.
  • getInterfaces() মেথডের মাধ্যমে আপনি একটি ক্লাসের সমস্ত ইন্টারফেস অ্যাক্সেস করতে পারেন।
  • রিফ্লেকশন ব্যবহার করে আপনি রানটাইমে একটি ক্লাসের সাথে যুক্ত সমস্ত ইন্টারফেস সম্পর্কে জানতে পারেন এবং এই ইন্টারফেসগুলির উপর কাজ করতে পারেন।
  • আপনি isInterface() মেথড ব্যবহার করে যাচাই করতে পারেন যে একটি নির্দিষ্ট Class একটি ইন্টারফেস কিনা।
Content added By
Promotion

Are you sure to start over?

Loading...