Type Inference:
টাইপ ইনফারেন্স হলো জাভার একটি বৈশিষ্ট্য যা কম্পাইলারকে টাইপ প্যারামিটার স্বয়ংক্রিয়ভাবে অনুমান করতে সাহায্য করে। অর্থাৎ, কোডে স্পষ্টভাবে টাইপ উল্লেখ না করলেও, কম্পাইলার প্রসঙ্গ অনুযায়ী টাইপ নির্ধারণ করে নেয়।
টাইপ ইনফারেন্স জাভার জেনেরিক্স ব্যবহার করে কোডকে আরো সহজ ও সংক্ষিপ্ত করতে সহায়তা করে।
Type Inference কিভাবে কাজ করে
জাভা কম্পাইলার নির্ধারণ করে:
- কোথায় টাইপ ইনফারেন্স প্রয়োজন।
- মেথড কল বা জেনেরিক কনস্ট্রাক্টরের প্রসঙ্গ অনুযায়ী টাইপ অনুমান করে।
উদাহরণসমূহ
1. সাধারণ উদাহরণ (Without Type Inference):
import java.util.ArrayList;
import java.util.List;
public class TypeInferenceExample {
public static void main(String[] args) {
// Without Type Inference
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("Generics");
System.out.println(list);
}
}
2. টাইপ ইনফারেন্সের ব্যবহার (Diamond Operator):
import java.util.ArrayList;
import java.util.List;
public class TypeInferenceExample {
public static void main(String[] args) {
// With Type Inference
List<String> list = new ArrayList<>(); // Compiler infers <String>
list.add("Hello");
list.add("Generics");
System.out.println(list);
}
}
আউটপুট:
[Hello, Generics]
টাইপ ইনফারেন্স এবং জেনেরিক মেথড
উদাহরণ: জেনেরিক মেথডে টাইপ ইনফারেন্স
public class GenericMethodExample {
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
public static void main(String[] args) {
Integer[] intArray = {1, 2, 3};
String[] strArray = {"Java", "Generics"};
// Type Inference: Compiler infers T as Integer and String
printArray(intArray);
printArray(strArray);
}
}
আউটপুট:
1
2
3
Java
Generics
Type Inference with Collections and Streams
1. টাইপ ইনফারেন্স Collections এর সাথে
import java.util.List;
public class TypeInferenceWithCollections {
public static void main(String[] args) {
List<String> list = List.of("Java", "Generics", "Inference");
list.forEach(System.out::println); // Compiler infers String type
}
}
আউটপুট:
Java
Generics
Inference
2. টাইপ ইনফারেন্স Streams এর সাথে
import java.util.List;
public class StreamTypeInference {
public static void main(String[] args) {
List<Integer> numbers = List.of(1, 2, 3, 4);
// Compiler infers the type of elements as Integer
int sum = numbers.stream().mapToInt(Integer::intValue).sum();
System.out.println("Sum: " + sum);
}
}
আউটপুট:
Sum: 10
Type Inference with var (Java 10+)
জাভা 10 থেকে var টাইপ ইনফারেন্স আরো সহজ করে তোলে।
import java.util.List;
public class VarTypeInference {
public static void main(String[] args) {
var list = List.of("Type", "Inference", "Java");
for (var str : list) {
System.out.println(str);
}
}
}
আউটপুট:
Type
Inference
Java
Type Inference এর সুবিধা
- কোড সংক্ষিপ্ত হয়: টাইপ উল্লেখ করার প্রয়োজন কমে যায়।
- কোড রিডেবিলিটি বৃদ্ধি পায়: ডেভেলপাররা টাইপ উল্লেখ না করেও সহজে কোড লিখতে পারেন।
- Error-Prone কমানো যায়: টাইপ মিসম্যাচ কম্পাইল-টাইমেই ধরা পড়ে।
Type Inference এর সীমাবদ্ধতা
টাইপ ইনফারেন্স সবসময় স্পষ্ট নয়:
List<?> list = new ArrayList<>(); // Wildcard টাইপ অজানা- জেনেরিক টাইপের ক্ষেত্রে Type Erasure সমস্যা তৈরি করতে পারে।
varব্যবহার করলে কোডের প্রসঙ্গ বুঝতে অসুবিধা হতে পারে।
টাইপ ইনফারেন্স জাভার একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ডেভেলপারদের টাইপ উল্লেখ করার ঝামেলা থেকে মুক্তি দেয়। এটি কোডকে সহজ, পরিষ্কার এবং টাইপ সেফ করে তোলে। Diamond Operator, Generic Methods, এবং var এর মতো বৈশিষ্ট্যগুলির মাধ্যমে টাইপ ইনফারেন্স আরও কার্যকরভাবে ব্যবহৃত হয়।
Read more