জাভা জেনেরিক্স হলো একটি ফিচার যা টাইপ (data type) নির্ধারণের জন্য ব্যবহার করা হয়। এটি কম্পাইল-টাইমে টাইপ চেকিং নিশ্চিত করে এবং রানটাইমে টাইপ ক্যাস্টিং কমায়। জেনেরিক্সের মাধ্যমে একটি ক্লাস, ইন্টারফেস বা মেথডকে বিভিন্ন ডেটা টাইপের জন্য পুনরায় ব্যবহারযোগ্য করা যায়।
Generics এর সুবিধা
টাইপ সেফটি (Type Safety):
জেনেরিক্স কোডের টাইপ সেফটি নিশ্চিত করে। এটি কম্পাইলারকে জানায় কী ধরনের অবজেক্ট একটি কালেকশনে রাখা হবে, ফলে রানটাইমে টাইপ-রিলেটেড ভুল এড়ানো যায়।List<String> list = new ArrayList<>(); list.add("Hello"); // list.add(123); // কম্পাইল-টাইমে এরর দেখাবেকোড পুনরায় ব্যবহারযোগ্যতা (Code Reusability):
জেনেরিক্স ব্যবহার করে একই ক্লাস বা মেথড বিভিন্ন ডেটা টাইপের জন্য ব্যবহার করা যায়।public class GenericBox<T> { private T item; public void setItem(T item) { this.item = item; } public T getItem() { return item; } }টাইপ ক্যাস্টিং প্রয়োজন হয় না (No Need for Explicit Type Casting):
টাইপ ক্যাস্টিং ম্যানুয়ালি করতে হয় না, কারণ কম্পাইলার জেনেরিক্সের মাধ্যমে সঠিক টাইপ নির্ধারণ করে।List<String> list = new ArrayList<>(); list.add("Java"); String str = list.get(0); // টাইপ ক্যাস্টিং প্রয়োজন নেই- রানটাইম এরর কমায় (Reduced Runtime Errors):
টাইপ মিসম্যাচের কারণে যে এরর হয়, জেনেরিক্স সেগুলো কম্পাইল-টাইমেই খুঁজে বের করতে সাহায্য করে।
Generics এর সীমাবদ্ধতা
প্রাইমিটিভ টাইপের সাথে কাজ করে না (Cannot Use Primitive Types):
জেনেরিক্স প্রাইমিটিভ টাইপ (int, char, float) সমর্থন করে না। এজন্য প্রাইমিটিভ টাইপের পরিবর্তে তার Wrapper ক্লাস (Integer, Double ইত্যাদি) ব্যবহার করতে হয়।// ভুল: // List<int> list = new ArrayList<>(); // সঠিক: List<Integer> list = new ArrayList<>();রানটাইম টাইপ ইরেজার (Type Erasure):
কম্পাইল-টাইমে টাইপ ইনফরমেশন উপস্থিত থাকলেও, রানটাইমে এই ইনফরমেশন মুছে ফেলা হয়। ফলে টাইপ চেকিং রানটাইমে সম্ভব হয় না।List<String> list1 = new ArrayList<>(); List<Integer> list2 = new ArrayList<>(); System.out.println(list1.getClass() == list2.getClass()); // true- স্ট্যাটিক কনটেক্সটে কাজ করে না (Cannot Use in Static Context):
জেনেরিক টাইপ স্ট্যাটিক ফিল্ড বা মেথডে ব্যবহার করা যায় না, কারণ জেনেরিক্স টাইপ ইরেজারের কারণে রানটাইমে উপলব্ধ থাকে না। অবজেক্ট তৈরির সময় কনট্রোল সীমাবদ্ধ:
জেনেরিক টাইপের উপর ভিত্তি করে নতুন অবজেক্ট তৈরি করা সম্ভব নয়।public class GenericBox<T> { // T obj = new T(); // এটি সম্ভব নয় }অ্যারে তৈরি করতে সমস্যা:
জেনেরিক টাইপের অ্যারে সরাসরি তৈরি করা যায় না।// ভুল: // T[] array = new T[10]; // সঠিক: @SuppressWarnings("unchecked") T[] array = (T[]) new Object[10];
Java Generics টাইপ সেফ এবং পুনরায় ব্যবহারযোগ্য কোড লেখার সুবিধা প্রদান করে। তবে কিছু সীমাবদ্ধতা রয়েছে, বিশেষত টাইপ ইরেজার এবং প্রাইমিটিভ টাইপের সঙ্গে কাজ করার ক্ষেত্রে। এগুলো মাথায় রেখে জেনেরিক্সের সঠিক ব্যবহার উন্নত এবং কার্যকরী কোড লিখতে সহায়ক হয়।
Read more