ParameterizedType এবং WildcardType এর ব্যবহার

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

306

java.lang.reflect প্যাকেজে ParameterizedType এবং WildcardType দুটি ইন্টারফেস রয়েছে যা জাভার জেনেরিক টাইপ সিস্টেমের সঙ্গে সম্পর্কিত এবং এটি রিফ্লেকশন মাধ্যমে টাইপ ইনফরমেশন অ্যাক্সেস করতে ব্যবহৃত হয়।

১. ParameterizedType:

ParameterizedType ইন্টারফেসটি একটি জেনেরিক টাইপের প্যারামিটারাইজড রূপের টাইপ তথ্য ধারণ করে। এটি জেনেরিক টাইপ যেমন List<String>, Map<K, V>, ইত্যাদি বুঝতে সহায়তা করে। ParameterizedType ইন্টারফেসের মাধ্যমে আপনি কোন টাইপ প্যারামিটার ব্যবহৃত হয়েছে তা জানতে পারবেন।

ParameterizedType-এর ব্যবহার:

  • আপনি ParameterizedType ব্যবহার করে একটি ক্লাস বা মেথডের টাইপ প্যারামিটার নিয়ে তথ্য সংগ্রহ করতে পারেন।
  • সাধারণভাবে এটি Field, Method বা Constructor অবজেক্টের getGenericType() মেথড থেকে পাওয়া যায়।

উদাহরণ:

import java.lang.reflect.*;
import java.util.*;

public class ParameterizedTypeExample {
    public static void main(String[] args) throws NoSuchFieldException {
        // Example class with a generic field
        class MyClass {
            private List<String> list;
        }

        // Get the field "list" from MyClass
        Field field = MyClass.class.getDeclaredField("list");

        // Get the generic type of the field
        Type fieldType = field.getGenericType();

        if (fieldType instanceof ParameterizedType) {
            ParameterizedType paramType = (ParameterizedType) fieldType;
            Type[] typeArguments = paramType.getActualTypeArguments();

            // Print the type arguments of the generic type
            for (Type type : typeArguments) {
                System.out.println("Type argument: " + type.getTypeName());
            }
        }
    }
}

Output:

Type argument: java.lang.String

ব্যাখ্যা:

  • এখানে MyClass এর একটি ফিল্ড list রয়েছে, যা একটি প্যারামিটারাইজড টাইপ List<String>
  • getGenericType() ব্যবহার করে, ফিল্ডটির টাইপ অবজেক্ট পাওয়া যায় এবং তার পর ParameterizedType হিসেবে কাস্ট করে প্যারামিটারাইজড টাইপের বাস্তব ধরণ পাওয়া যায়।
  • getActualTypeArguments() মেথডটি প্যারামিটারাইজড টাইপের আর্গুমেন্ট (যেমন String এখানে) ফেরত দেয়।

২. WildcardType:

WildcardType ইন্টারফেসটি জেনেরিক টাইপে wildcards (যেমন ? extends T বা ? super T) ব্যবহৃত হলে এটি টাইপের তথ্য ধারণ করে। এই টাইপটি ? extends বা ? super এর মতো wildcards এর ব্যবহার ব্যাখ্যা করে।

WildcardType-এর ব্যবহার:

  • Wildcard টাইপের মাধ্যমে আপনি এমন টাইপের তথ্য পেতে পারেন যা সাধারণত জেনেরিকের মধ্যে ব্যবহার করা হয়, কিন্তু প্রকারের প্যারামিটার নির্দিষ্ট নয়।

উদাহরণ:

import java.lang.reflect.*;
import java.util.*;

public class WildcardTypeExample {
    public static void main(String[] args) throws NoSuchFieldException {
        // Example class with a wildcard generic type
        class MyClass {
            private List<? extends Number> numbers;
        }

        // Get the field "numbers" from MyClass
        Field field = MyClass.class.getDeclaredField("numbers");

        // Get the generic type of the field
        Type fieldType = field.getGenericType();

        if (fieldType instanceof WildcardType) {
            WildcardType wildcardType = (WildcardType) fieldType;
            Type[] upperBounds = wildcardType.getUpperBounds();

            // Print the upper bounds of the wildcard
            for (Type type : upperBounds) {
                System.out.println("Upper bound: " + type.getTypeName());
            }
        }
    }
}

Output:

Upper bound: java.lang.Number

ব্যাখ্যা:

  • এখানে MyClass-এর একটি ফিল্ড numbers রয়েছে, যা List<? extends Number> টাইপে ডিফাইন করা আছে।
  • ? extends Number wildcard টাইপের মধ্যে Number হলো upper bound।
  • getUpperBounds() মেথডটি WildcardType এর upper bounds রিটার্ন করে, যা এই ক্ষেত্রে Number

WildcardType এর মূল বৈশিষ্ট্য:

  • getUpperBounds(): যেকোনো wildcard এর upper bounds (যেমন ? extends T) দেয়।
  • getLowerBounds(): যেকোনো wildcard এর lower bounds (যেমন ? super T) দেয়।

সন্নিবেশ (Summary):

  1. ParameterizedType: এটি ব্যবহৃত হয় যখন আপনি জেনেরিক টাইপের প্যারামিটারগুলি (যেমন List<String>) অ্যাক্সেস করতে চান।
    • উদাহরণ: List<String> এর মধ্যে String হচ্ছে প্যারামিটারাইজড টাইপের আর্গুমেন্ট।
  2. WildcardType: এটি ব্যবহৃত হয় wildcard টাইপ (যেমন ? extends T বা ? super T) এর তথ্য সংগ্রহ করতে।
    • উদাহরণ: List<? extends Number> এর মধ্যে Number হচ্ছে upper bound wildcard টাইপের।

ParameterizedType এবং WildcardType দুটি রিফ্লেকশন বৈশিষ্ট্য যা জেনেরিক টাইপ সিস্টেমের গুরুত্বপূর্ণ অংশ। এই দুটি ব্যবহার করে আপনি টাইপের প্যারামিটার এবং wildcard সম্পর্কে তথ্য সংগ্রহ করতে পারেন এবং টাইপ সেফ কোড তৈরি করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...