Bounded Type Parameters কি এবং এর প্রয়োজনীয়তা

Bounded Type Parameters - জাভা জেনেরিক্স (Java Generics) - Java Technologies

313

Bounded Type Parameters হল Java Generics-এর একটি ফিচার যা টাইপ প্যারামিটারকে নির্দিষ্ট একটি শ্রেণি বা ইন্টারফেসের মধ্যে সীমাবদ্ধ করে। এটি টাইপ প্যারামিটারকে একটি নির্দিষ্ট সীমার মধ্যে কাজ করতে বাধ্য করে।


Bounded Type Parameters এর সিনট্যাক্স

Bounded Type Parameters নির্ধারণ করার জন্য extends কীওয়ার্ড ব্যবহার করা হয়। এটি টাইপ প্যারামিটারকে একটি নির্দিষ্ট ক্লাস বা ইন্টারফেস এবং তার সাবক্লাসের মধ্যে সীমাবদ্ধ করে।

class ClassName<T extends SuperClass> {
    // Class Definition
}

উদাহরণ:

public class GenericClass<T extends Number> {
    private T value;

    public GenericClass(T value) {
        this.value = value;
    }

    public double getDoubleValue() {
        return value.doubleValue();
    }
}

// Usage:
GenericClass<Integer> intObj = new GenericClass<>(10);
System.out.println(intObj.getDoubleValue());

GenericClass<Double> doubleObj = new GenericClass<>(5.5);
System.out.println(doubleObj.getDoubleValue());

// GenericClass<String> strObj = new GenericClass<>("Hello"); // Compile-time Error

Bounded Type Parameters এর ধরণ

  1. Upper Bound (T extends SomeClass)
    টাইপ প্যারামিটার হবে নির্দিষ্ট ক্লাস বা ইন্টারফেস এবং তার সাবক্লাস।

    উদাহরণ:

    public static <T extends Number> double add(T a, T b) {
        return a.doubleValue() + b.doubleValue();
    }
    
    public static void main(String[] args) {
        System.out.println(add(5, 10));     // Valid
        System.out.println(add(3.5, 2.5)); // Valid
        // System.out.println(add("5", "10")); // Compile-time Error
    }
    
  2. Multiple Bounds (T extends Class & Interface)
    টাইপ প্যারামিটার একাধিক শ্রেণি বা ইন্টারফেসের সীমার মধ্যে থাকতে পারে।

    উদাহরণ:

    public class GenericClass<T extends Number & Comparable<T>> {
        private T value;
    
        public GenericClass(T value) {
            this.value = value;
        }
    
        public boolean isGreaterThan(T other) {
            return value.compareTo(other) > 0;
        }
    }
    
  3. Unbounded Type (T)
    কোন সীমাবদ্ধতা নেই; যে কোনো টাইপ ব্যবহার করা যায়।

    উদাহরণ:

    public static <T> void print(T value) {
        System.out.println(value);
    }
    

Bounded Type Parameters এর প্রয়োজনীয়তা

  1. কোড রিইউজেবিলিটি বৃদ্ধি করা
    Bounded Type Parameters ব্যবহার করে একই কোড বিভিন্ন ক্লাসের জন্য ব্যবহার করা যায়, তবে নির্দিষ্ট টাইপের জন্য সীমাবদ্ধতা থাকে।
  2. টাইপ সেফটি নিশ্চিত করা
    নির্দিষ্ট সীমার বাইরে কোন টাইপ ব্যবহার করতে গেলে compile-time এ এরর দেখা যায়।

    public static <T extends Number> void printSquare(T number) {
        System.out.println(number.doubleValue() * number.doubleValue());
    }
    
    // Usage:
    printSquare(5);     // Valid
    printSquare(3.14);  // Valid
    // printSquare("Hello"); // Compile-time Error
    
  3. কোডের কার্যক্ষমতা বৃদ্ধি করা
    টাইপ চেকিং compile-time এ নিশ্চিত করায় runtime errors এর সম্ভাবনা কমে যায়।
  4. প্রাসঙ্গিক অপারেশন সীমাবদ্ধ করা
    Bounded Type Parameters ব্যবহার করে কেবল প্রাসঙ্গিক অপারেশনগুলো সীমাবদ্ধ করা যায়, যেমন একটি নির্দিষ্ট ক্লাসের মেথড বা ফিল্ড ব্যবহার।
  5. মাল্টিপল টাইপ ইমপ্লিমেন্টেশন সহজ করা
    একাধিক ক্লাস বা ইন্টারফেসের মিশ্রণ দিয়ে টাইপ প্যারামিটার বাউন্ড করা যায়।

Wildcard এবং Bounded Type Parameters

Bounded Wildcard (? extends T বা ? super T) ব্যবহার করে Generics-এ আরও বেশি ডাইনামিক সুবিধা পাওয়া যায়।

উদাহরণ: Upper Bound Wildcard

public static void printList(List<? extends Number> list) {
    for (Number num : list) {
        System.out.println(num);
    }
}

উদাহরণ: Lower Bound Wildcard

public static void addToList(List<? super Integer> list) {
    list.add(10);
    list.add(20);
}

সারসংক্ষেপ

  • Bounded Type Parameters টাইপ প্যারামিটারকে একটি নির্দিষ্ট ক্লাস বা ইন্টারফেস এবং তার সাবটাইপের মধ্যে সীমাবদ্ধ করে।
  • এটি টাইপ সেফটি নিশ্চিত করে এবং compile-time এ টাইপ চেকিং করতে সাহায্য করে।
  • কোড পুনঃব্যবহারযোগ্য এবং কার্যকর করে তোলে।
  • Generics এর কার্যকারিতা বাড়াতে এটি অপরিহার্য।
Content added By
Promotion

Are you sure to start over?

Loading...