Java Technologies Generic Arrays তৈরি করা গাইড ও নোট

311

জাভায় জেনেরিক্স এবং অ্যারে একসঙ্গে ব্যবহার করা কিছু সীমাবদ্ধতার কারণে সরাসরি Generic Arrays তৈরি করা যায় না। এর প্রধান কারণ হলো Type Erasure, যা জেনেরিক টাইপ সম্পর্কিত তথ্যকে কম্পাইল-টাইমে মুছে ফেলে। তবে, কিছু কৌশলের মাধ্যমে জেনেরিক অ্যারের কার্যকারিতা অর্জন করা যায়।


Generic Arrays সরাসরি তৈরি করার সীমাবদ্ধতা

কোড উদাহরণ (সঠিক নয়):

public class GenericArray<T> {
    private T[] array;

    public GenericArray(int size) {
        array = new T[size]; // Compile-time error
    }
}

কারণ:

  1. জেনেরিক্সের টাইপ T Runtime-এ উপলব্ধ থাকে না।
  2. জাভার জেনেরিক্স Runtime-এ টাইপ তথ্য মুছে ফেলে, ফলে জাভা জানে না কী ধরনের অ্যারে তৈরি করতে হবে।

Generic Arrays তৈরির সমাধান

1. Object Array ব্যবহার করা

Generic Arrays তৈরি করতে Object Array ব্যবহার করে তা টাইপ কাস্ট করা যেতে পারে।

উদাহরণ:

public class GenericArray<T> {
    private T[] array;

    @SuppressWarnings("unchecked")
    public GenericArray(int size) {
        array = (T[]) new Object[size]; // Type casting Object array to T array
    }

    public T get(int index) {
        return array[index];
    }

    public void set(int index, T value) {
        array[index] = value;
    }

    public static void main(String[] args) {
        GenericArray<String> stringArray = new GenericArray<>(10);
        stringArray.set(0, "Hello");
        System.out.println(stringArray.get(0));
    }
}

আউটপুট:

Hello

বিঃদ্রঃ: @SuppressWarnings("unchecked") ব্যবহার করতে হয় কারণ টাইপ কাস্টিং চলাকালীন কম্পাইলার ওয়ার্নিং দেখায়।


2. Reflection ব্যবহার করা

java.lang.reflect.Array ক্লাস ব্যবহার করে Runtime-এ Generic Arrays তৈরি করা যায়।

উদাহরণ:

import java.lang.reflect.Array;

public class GenericArrayWithReflection<T> {
    private T[] array;

    @SuppressWarnings("unchecked")
    public GenericArrayWithReflection(Class<T> clazz, int size) {
        array = (T[]) Array.newInstance(clazz, size); // Create array using reflection
    }

    public T get(int index) {
        return array[index];
    }

    public void set(int index, T value) {
        array[index] = value;
    }

    public static void main(String[] args) {
        GenericArrayWithReflection<String> stringArray = new GenericArrayWithReflection<>(String.class, 10);
        stringArray.set(0, "Generics");
        System.out.println(stringArray.get(0));
    }
}

আউটপুট:

Generics

3. List ব্যবহার করে Generic Arrays এর বিকল্প

জাভার List ইন্টারফেস এবং ArrayList ক্লাস ব্যবহার করে অ্যারে-সদৃশ Generic Collections তৈরি করা যেতে পারে।

উদাহরণ:

import java.util.ArrayList;
import java.util.List;

public class GenericArrayUsingList<T> {
    private List<T> list;

    public GenericArrayUsingList() {
        list = new ArrayList<>();
    }

    public void add(T value) {
        list.add(value);
    }

    public T get(int index) {
        return list.get(index);
    }

    public static void main(String[] args) {
        GenericArrayUsingList<String> stringArray = new GenericArrayUsingList<>();
        stringArray.add("Java Generics");
        System.out.println(stringArray.get(0));
    }
}

আউটপুট:

Java Generics

Generic Arrays তৈরির সীমাবদ্ধতা ও পরামর্শ

সীমাবদ্ধতা:

  1. Type Erasure: Generic Arrays সরাসরি তৈরি করা যায় না।
  2. Runtime Type Information: Runtime-এ টাইপ চেকিং সম্ভব নয়।

পরামর্শ:

  • Object[] বা Reflection ব্যবহার করে Generic Arrays তৈরি করুন।
  • Generic Arrays-এর পরিবর্তে Collections ব্যবহার করুন, যেমন ArrayList
  • টাইপ ক্যাস্টিং করার সময় সতর্ক থাকুন এবং @SuppressWarnings ব্যবহার করুন।

Generic Arrays সরাসরি তৈরি করা সম্ভব নয়, তবে Object Arrays, Reflection, বা Collections Framework ব্যবহার করে এই সীমাবদ্ধতা এড়ানো যায়। জাভার জেনেরিক্স Type Safety নিশ্চিত করলেও অ্যারের ক্ষেত্রে বিশেষ কিছু কৌশল প্রয়োজন হয়।

Content added By
Promotion

Are you sure to start over?

Loading...