জেনেরিক্স (Generics) হলো Java প্রোগ্রামিং ভাষার একটি বৈশিষ্ট্য, যা ডেটার ধরনের উপর ভিত্তি করে ক্লাস, ইন্টারফেস, এবং মেথডকে আরও নির্দিষ্ট এবং নিরাপদ করে তোলে। জেনেরিক্স ব্যবহার করে একটি ক্লাস বা মেথডকে এমনভাবে তৈরি করা যায় যাতে সেটি একাধিক ডেটা টাইপের সাথে কাজ করতে পারে, অথচ কম্পাইল টাইমে টাইপ সেফটি নিশ্চিত হয়।
কেন জেনেরিক্স ব্যবহার করা হয়?
- টাইপ সেফটি নিশ্চিত করা: জেনেরিক্স ব্যবহার করলে কম্পাইল টাইমে ডেটার ধরনের নির্দিষ্টতা নিশ্চিত হয়, ফলে রানটাইমে ক্লাসকাস্ট এক্সেপশন (ClassCastException) এড়ানো যায়।
- কোডের পুনরায় ব্যবহারযোগ্যতা: জেনেরিক্স ব্যবহার করে একবার একটি ক্লাস বা মেথড তৈরি করলে সেটি বিভিন্ন ডেটা টাইপের জন্য পুনরায় ব্যবহার করা যায়।
- কোডের পাঠযোগ্যতা ও রক্ষণাবেক্ষণ সহজ: টাইপ সেফ কোড আরও সহজে পড়া যায় এবং মেইনটেন করা যায়।
- অপ্রয়োজনীয় টাইপকাস্টিং এড়ানো: জেনেরিক্স ব্যবহার করলে টাইপকাস্টিং প্রয়োজন হয় না, ফলে কোড আরও পরিষ্কার হয়।
জেনেরিক্সের গঠন
জেনেরিক্সের জন্য সাধারণত T, E, K, V ইত্যাদি প্রতীক ব্যবহার করা হয়। এগুলো বিভিন্ন ডেটা টাইপকে নির্দেশ করে।
T– TypeE– Element (সাধারণত কালেকশন ফ্রেমওয়ার্কের জন্য)K– Key (ম্যাপে ব্যবহার করা হয়)V– Value (ম্যাপে ব্যবহার করা হয়)
জেনেরিক্স ব্যবহার
১. জেনেরিক ক্লাস তৈরি
// জেনেরিক ক্লাস
class Box<T> {
private T value;
public void setValue(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
public class GenericClassExample {
public static void main(String[] args) {
Box<Integer> integerBox = new Box<>(); // Integer টাইপের Box
integerBox.setValue(10);
System.out.println("Integer Value: " + integerBox.getValue());
Box<String> stringBox = new Box<>(); // String টাইপের Box
stringBox.setValue("Hello");
System.out.println("String Value: " + stringBox.getValue());
}
}
আউটপুট:
Integer Value: 10
String Value: Hello
ব্যাখ্যা:
Box<T>একটি জেনেরিক ক্লাস যেখানেTহলো ডেটা টাইপ।Tএর মান ইন্সট্যান্স তৈরি করার সময় নির্ধারিত হয়।integerBoxএর জন্যTএর মানIntegerএবংstringBoxএর জন্যTএর মানString।
২. জেনেরিক মেথড তৈরি
জেনেরিক মেথড ব্যবহার করে একাধিক ডেটা টাইপের উপর কাজ করা যায়।
public class GenericMethodExample {
// জেনেরিক মেথড
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.print(element + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] intArray = {1, 2, 3, 4, 5};
String[] strArray = {"Hello", "World"};
System.out.print("Integer Array: ");
printArray(intArray);
System.out.print("String Array: ");
printArray(strArray);
}
}
আউটপুট:
Integer Array: 1 2 3 4 5
String Array: Hello World
ব্যাখ্যা:
printArrayএকটি জেনেরিক মেথড, যা যেকোনো ধরনের অ্যারের উপাদান প্রিন্ট করতে পারে।<T>মেথডে টাইপ প্যারামিটার নির্দেশ করে, যা পরে মেথড কল করার সময় নির্ধারিত হয়।
৩. জেনেরিক্সের সাথে কালেকশন ফ্রেমওয়ার্ক ব্যবহার
Java Collections Framework-এ জেনেরিক্স বহুলভাবে ব্যবহৃত হয়, যেমন ArrayList, HashMap ইত্যাদি।
উদাহরণ: ArrayList এর সাথে জেনেরিক্স
import java.util.ArrayList;
import java.util.List;
public class CollectionGenericExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>(); // String টাইপের ArrayList
names.add("Alice");
names.add("Bob");
for (String name : names) {
System.out.println(name);
}
}
}
আউটপুট:
Alice
Bob
ব্যাখ্যা:
List<String>দিয়েnamesলিস্ট তৈরি করা হয়েছে, যেখানে শুধুমাত্রStringটাইপের মান যোগ করা যাবে।- এটি টাইপ সেফটি নিশ্চিত করে, ফলে অন্য ধরনের মান যোগ করলে কম্পাইল টাইমেই ত্রুটি দেখাবে।
উদাহরণ: HashMap এর সাথে জেনেরিক্স
import java.util.HashMap;
import java.util.Map;
public class MapGenericExample {
public static void main(String[] args) {
Map<Integer, String> idToName = new HashMap<>(); // Integer কী এবং String মান
idToName.put(1, "Alice");
idToName.put(2, "Bob");
for (Map.Entry<Integer, String> entry : idToName.entrySet()) {
System.out.println("ID: " + entry.getKey() + ", Name: " + entry.getValue());
}
}
}
আউটপুট:
ID: 1, Name: Alice
ID: 2, Name: Bob
ব্যাখ্যা:
Map<Integer, String>এর মাধ্যমে কী এবং মানের জন্য নির্দিষ্ট ডেটা টাইপ ব্যবহার করা হয়েছে।- এটি নিশ্চিত করে যে কী হলো
Integerএবং মান হলোStringটাইপের।
বাউন্ডেড টাইপ প্যারামিটার (Bounded Type Parameters)
জেনেরিক্সে বাউন্ডেড টাইপ প্যারামিটার ব্যবহার করে নির্দিষ্ট টাইপের সাবক্লাসের উপর সীমাবদ্ধ করা যায়। উদাহরণস্বরূপ, আমরা কেবলমাত্র Number বা এর সাবক্লাসের জন্য জেনেরিক মেথড তৈরি করতে পারি।
public class BoundedTypeExample {
// বাউন্ডেড টাইপ প্যারামিটার
public static <T extends Number> double add(T num1, T num2) {
return num1.doubleValue() + num2.doubleValue();
}
public static void main(String[] args) {
System.out.println("Addition: " + add(5, 10)); // আউটপুট: 15.0
System.out.println("Addition: " + add(5.5, 10.5)); // আউটপুট: 16.0
}
}
ব্যাখ্যা:
<T extends Number>দিয়ে জেনেরিক মেথডে বাউন্ড নির্ধারণ করা হয়েছে, যাতে কেবলNumberবা তার সাবক্লাসের মানগুলো ব্যবহার করা যায়।add()মেথডটি ইন্টিজার বা ডাবল টাইপ গ্রহণ করতে পারে।
সারসংক্ষেপ
- জেনেরিক্স হলো টাইপ সেফ কোড লেখার একটি উপায়, যা ডেটার ধরন নির্দিষ্ট করতে সহায়ক।
- এটি কোডের পুনরায় ব্যবহারযোগ্যতা, নিরাপত্তা এবং পাঠযোগ্যতা বৃদ্ধি করে।
- জেনেরিক ক্লাস, জেনেরিক মেথড, এবং কালেকশন ফ্রেমওয়ার্কে জেনেরিক্স ব্যবহার করে বিভিন্ন ধরনের ডেটা ম্যানেজ করা যায়।
Java-তে জেনেরিক্স ব্যবহার করে প্রোগ্রামের কার্যক্ষমতা এবং স্থায়িত্ব নিশ্চিত করে টাইপ সেফ কোড তৈরি করা সহজ হয়, যা বড় প্রজেক্ট মেইনটেন করতে সহায়ক।
Read more