Wildcards কি এবং কিভাবে কাজ করে?

Wildcards এর ধারণা - জাভা জেনেরিক্স (Java Generics) - Java Technologies

398

Wildcards হলো জাভা জেনেরিক্সের একটি ফিচার যা ডেটা টাইপের নির্দিষ্ট সীমা না দিয়ে জেনেরিক টাইপকে আরও নমনীয় করে তোলে। এটি জেনেরিক কোডে ডেটা টাইপের সংজ্ঞা নির্ধারণ না করেও বিভিন্ন টাইপের ডেটা ব্যবস্থাপনা করার অনুমতি দেয়। Wildcards সাধারণত ? চিহ্ন দিয়ে বোঝানো হয়।


Wildcards কী?

Wildcards হলো Generics-এ ব্যবহৃত একটি বিশেষ চিহ্ন (?) যা একটি অজানা টাইপকে নির্দেশ করে। এটি নিম্নলিখিত ধরণের কেসে ব্যবহৃত হয়:

  1. Unbounded Wildcard: ?
  2. Upper Bounded Wildcard: ? extends Type
  3. Lower Bounded Wildcard: ? super Type

Wildcards এর প্রকারভেদ

১. Unbounded Wildcard (?)

Unbounded Wildcard নির্দেশ করে যে এটি যেকোনো ডেটা টাইপ হতে পারে।

উদাহরণ:

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

public static void main(String[] args) {
    List<String> stringList = List.of("A", "B", "C");
    List<Integer> intList = List.of(1, 2, 3);

    printList(stringList); // Works with String
    printList(intList);    // Works with Integer
}

ফলাফল:

A
B
C
1
2
3

২. Upper Bounded Wildcard (? extends Type)

Upper Bounded Wildcard নির্দেশ করে যে টাইপটি নির্দিষ্ট ক্লাস বা তার সাবক্লাস হতে হবে। এটি ব্যবহার করা হয় যখন একটি জেনেরিক মেথড শুধুমাত্র নির্দিষ্ট টাইপের ডেটার সাথে কাজ করবে।

উদাহরণ:

public static double sumList(List<? extends Number> list) {
    double sum = 0.0;
    for (Number num : list) {
        sum += num.doubleValue();
    }
    return sum;
}

public static void main(String[] args) {
    List<Integer> intList = List.of(1, 2, 3);
    List<Double> doubleList = List.of(1.1, 2.2, 3.3);

    System.out.println("Sum of Integer List: " + sumList(intList));
    System.out.println("Sum of Double List: " + sumList(doubleList));
}

ফলাফল:

Sum of Integer List: 6.0
Sum of Double List: 6.6

৩. Lower Bounded Wildcard (? super Type)

Lower Bounded Wildcard নির্দেশ করে যে টাইপটি নির্দিষ্ট ক্লাস বা তার সুপারক্লাস হতে হবে। এটি সাধারণত রাইট অপারেশনের জন্য ব্যবহৃত হয়।

উদাহরণ:

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

public static void main(String[] args) {
    List<Number> numberList = new ArrayList<>();
    addNumbers(numberList);
    System.out.println(numberList);
}

ফলাফল:

[10, 20]

Wildcards এর ব্যবহার

Wildcards এবং Collections Framework

Wildcards সাধারণত জাভার Collections Framework-এ ব্যবহার করা হয়, যেখানে একাধিক ডেটা টাইপকে হ্যান্ডেল করতে হয়।

উদাহরণ:

public static void printCollection(Collection<?> collection) {
    for (Object obj : collection) {
        System.out.println(obj);
    }
}

Wildcards এবং Generics এর সীমাবদ্ধতা

Wildcards ব্যবহার করার সময় কিছু অপারেশন সীমাবদ্ধ থাকে। যেমন:

  • Upper bounded wildcard (? extends) দিয়ে ডেটা যোগ করা সম্ভব নয়।
  • Lower bounded wildcard (? super) দিয়ে পড়া সম্ভব নয়।

উদাহরণ:

List<? extends Number> list = new ArrayList<>();
list.add(1); // Compile-time error

Wildcards এর সুবিধা

  1. Code Flexibility:
    Wildcards ব্যবহার করলে একই মেথড বা ক্লাস বিভিন্ন টাইপের সাথে কাজ করতে পারে।
  2. Reusable Methods:
    Wildcards জেনেরিক মেথডগুলোকে আরও পুনঃব্যবহারযোগ্য করে তোলে।
  3. Type Safety:
    Wildcards টাইপ সেফটি নিশ্চিত করে এবং রানটাইম ত্রুটি এড়ায়।
  4. Collections Framework:
    Collections Framework-এ Wildcards ব্যবহার করে ডেটা টাইপের সীমাবদ্ধতা নির্ধারণ করা সহজ হয়।

Wildcards এর সীমাবদ্ধতা

  1. Write এবং Read সীমাবদ্ধতা:
    • ? extends দিয়ে শুধু পড়া যায়, কিন্তু লেখা যায় না।
    • ? super দিয়ে লেখা যায়, কিন্তু পড়া সীমিত।
  2. বেশি জটিল লজিক:
    জটিল টাইপিংয়ের কারণে কোড বুঝতে কিছুটা সময় লাগতে পারে।

Wildcards হলো জাভা জেনেরিক্সের একটি গুরুত্বপূর্ণ অংশ যা মেথড এবং ক্লাসকে বিভিন্ন ডেটা টাইপের সাথে কাজ করতে দেয়। এটি টাইপ সেফটি এবং কোড পুনঃব্যবহারযোগ্যতার সুবিধা দেয়। বিভিন্ন টাইপের ডেটা হ্যান্ডেল করার জন্য Wildcards অপরিহার্য এবং Collections Framework-এ এর ব্যাপক ব্যবহার রয়েছে।

Content added By
Promotion

Are you sure to start over?

Loading...