জাভা জেনেরিক্স (Java Generics) হলো জাভা প্রোগ্রামিং ভাষার একটি গুরুত্বপূর্ণ ফিচার যা টাইপ-সেফটি ও কোড পুনঃব্যবহারযোগ্যতা নিশ্চিত করে। Generics জাভা 5-এ প্রবর্তিত হয়েছিল এবং এটি মূলত কম্পাইল টাইম টাইপ চেকিং এবং ক্লাস, ইন্টারফেস বা মেথডে টাইপ প্যারামিটার পাস করার সুবিধা দেয়।
Generics কী?
Generics এমন একটি মেকানিজম যা প্রোগ্রামারদের টাইপ (data type) নির্দিষ্ট করতে সাহায্য করে যখন ক্লাস, ইন্টারফেস, বা মেথড তৈরি করা হয়। এটি একই কোডকে বিভিন্ন ডেটা টাইপের সাথে কাজ করার জন্য ব্যবহৃত হতে দেয়।
উদাহরণ:
// Without Generics
List list = new ArrayList();
list.add("Hello");
String s = (String) list.get(0); // Type casting required
// With Generics
List<String> list = new ArrayList<>();
list.add("Hello");
String s = list.get(0); // No type casting needed
Generics কেন ব্যবহার করা হয়?
টাইপ সেফটি (Type Safety): Generics ব্যবহার করলে টাইপ মিসম্যাচের সমস্যা কম্পাইল টাইমে ধরা পড়ে। এটি রানটাইম ত্রুটির সম্ভাবনা কমিয়ে দেয়।
List<String> list = new ArrayList<>(); list.add(123); // Compile-time error: incompatible typesটাইপ কাস্টিংয়ের প্রয়োজন নেই (No Type Casting): Generics টাইপ কাস্টিং অপসারণ করে কোড সহজ ও পড়তে সুবিধাজনক করে তোলে।
// Without Generics Object obj = list.get(0); String str = (String) obj; // Type casting required // With Generics String str = list.get(0); // No type castingকোড পুনঃব্যবহারযোগ্যতা (Code Reusability): Generics কোডকে আরও সাধারণ এবং পুনঃব্যবহারযোগ্য করে তোলে।
public class GenericBox<T> { private T value; public void setValue(T value) { this.value = value; } public T getValue() { return value; } } public static void main(String[] args) { GenericBox<String> stringBox = new GenericBox<>(); stringBox.setValue("Hello"); System.out.println(stringBox.getValue()); GenericBox<Integer> integerBox = new GenericBox<>(); integerBox.setValue(123); System.out.println(integerBox.getValue()); }- রানটাইম ত্রুটি কমানো (Reduced Runtime Errors): Generics কম্পাইল টাইমেই টাইপ সংক্রান্ত ত্রুটি চিহ্নিত করে, যা রানটাইম ত্রুটির ঝুঁকি কমায়।
Generics এর ব্যবহার
Generics in Classes
public class GenericClass<T> {
private T value;
public void setValue(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
Generics in Methods
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
Generics in Interfaces
public interface GenericInterface<T> {
void display(T data);
}
Generics with Collections
Java Collections Framework যেমন ArrayList, HashMap ইত্যাদিতে Generics ব্যাপকভাবে ব্যবহৃত হয়।
List<String> stringList = new ArrayList<>();
Map<Integer, String> map = new HashMap<>();
Generics ব্যবহার করার সীমাবদ্ধতা
প্রাইমিটিভ টাইপ সাপোর্ট করেনা (No Primitive Types): Generics সরাসরি প্রাইমিটিভ টাইপ (int, char, etc.) সাপোর্ট করে না। এর পরিবর্তে Wrapper Classes (Integer, Character) ব্যবহার করতে হয়।
List<int> list = new ArrayList<>(); // Compile-time error List<Integer> list = new ArrayList<>(); // Correct- Runtime Type Erasure: Generics কম্পাইল টাইমে চেক করা হয় এবং টাইপ ইনফরমেশন রানটাইমে মুছে ফেলা হয়।
Java Generics টাইপ সেফটি, টাইপ কাস্টিংয়ের সরলতা, এবং কোডের পুনঃব্যবহারযোগ্যতা নিশ্চিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ। এটি Collections Framework এবং অন্যান্য ডেটা-সংশ্লিষ্ট অপারেশনে কার্যকরভাবে ব্যবহৃত হয়। Generics এর সঠিক ব্যবহার প্রোগ্রামের কার্যকারিতা ও নিরাপত্তা বৃদ্ধি করে।
Read more