java.lang.reflect প্যাকেজে ParameterizedType এবং WildcardType দুটি ইন্টারফেস রয়েছে যা জাভার জেনেরিক টাইপ সিস্টেমের সঙ্গে সম্পর্কিত এবং এটি রিফ্লেকশন মাধ্যমে টাইপ ইনফরমেশন অ্যাক্সেস করতে ব্যবহৃত হয়।
১. ParameterizedType:
ParameterizedType ইন্টারফেসটি একটি জেনেরিক টাইপের প্যারামিটারাইজড রূপের টাইপ তথ্য ধারণ করে। এটি জেনেরিক টাইপ যেমন List<String>, Map<K, V>, ইত্যাদি বুঝতে সহায়তা করে। ParameterizedType ইন্টারফেসের মাধ্যমে আপনি কোন টাইপ প্যারামিটার ব্যবহৃত হয়েছে তা জানতে পারবেন।
ParameterizedType-এর ব্যবহার:
- আপনি
ParameterizedTypeব্যবহার করে একটি ক্লাস বা মেথডের টাইপ প্যারামিটার নিয়ে তথ্য সংগ্রহ করতে পারেন। - সাধারণভাবে এটি
Field,MethodবাConstructorঅবজেক্টেরgetGenericType()মেথড থেকে পাওয়া যায়।
উদাহরণ:
import java.lang.reflect.*;
import java.util.*;
public class ParameterizedTypeExample {
public static void main(String[] args) throws NoSuchFieldException {
// Example class with a generic field
class MyClass {
private List<String> list;
}
// Get the field "list" from MyClass
Field field = MyClass.class.getDeclaredField("list");
// Get the generic type of the field
Type fieldType = field.getGenericType();
if (fieldType instanceof ParameterizedType) {
ParameterizedType paramType = (ParameterizedType) fieldType;
Type[] typeArguments = paramType.getActualTypeArguments();
// Print the type arguments of the generic type
for (Type type : typeArguments) {
System.out.println("Type argument: " + type.getTypeName());
}
}
}
}
Output:
Type argument: java.lang.String
ব্যাখ্যা:
- এখানে
MyClassএর একটি ফিল্ডlistরয়েছে, যা একটি প্যারামিটারাইজড টাইপList<String>। getGenericType()ব্যবহার করে, ফিল্ডটির টাইপ অবজেক্ট পাওয়া যায় এবং তার পরParameterizedTypeহিসেবে কাস্ট করে প্যারামিটারাইজড টাইপের বাস্তব ধরণ পাওয়া যায়।getActualTypeArguments()মেথডটি প্যারামিটারাইজড টাইপের আর্গুমেন্ট (যেমনStringএখানে) ফেরত দেয়।
২. WildcardType:
WildcardType ইন্টারফেসটি জেনেরিক টাইপে wildcards (যেমন ? extends T বা ? super T) ব্যবহৃত হলে এটি টাইপের তথ্য ধারণ করে। এই টাইপটি ? extends বা ? super এর মতো wildcards এর ব্যবহার ব্যাখ্যা করে।
WildcardType-এর ব্যবহার:
- Wildcard টাইপের মাধ্যমে আপনি এমন টাইপের তথ্য পেতে পারেন যা সাধারণত জেনেরিকের মধ্যে ব্যবহার করা হয়, কিন্তু প্রকারের প্যারামিটার নির্দিষ্ট নয়।
উদাহরণ:
import java.lang.reflect.*;
import java.util.*;
public class WildcardTypeExample {
public static void main(String[] args) throws NoSuchFieldException {
// Example class with a wildcard generic type
class MyClass {
private List<? extends Number> numbers;
}
// Get the field "numbers" from MyClass
Field field = MyClass.class.getDeclaredField("numbers");
// Get the generic type of the field
Type fieldType = field.getGenericType();
if (fieldType instanceof WildcardType) {
WildcardType wildcardType = (WildcardType) fieldType;
Type[] upperBounds = wildcardType.getUpperBounds();
// Print the upper bounds of the wildcard
for (Type type : upperBounds) {
System.out.println("Upper bound: " + type.getTypeName());
}
}
}
}
Output:
Upper bound: java.lang.Number
ব্যাখ্যা:
- এখানে
MyClass-এর একটি ফিল্ডnumbersরয়েছে, যাList<? extends Number>টাইপে ডিফাইন করা আছে। ? extends Numberwildcard টাইপের মধ্যেNumberহলো upper bound।getUpperBounds()মেথডটিWildcardTypeএর upper bounds রিটার্ন করে, যা এই ক্ষেত্রেNumber।
WildcardType এর মূল বৈশিষ্ট্য:
getUpperBounds(): যেকোনো wildcard এর upper bounds (যেমন? extends T) দেয়।getLowerBounds(): যেকোনো wildcard এর lower bounds (যেমন? super T) দেয়।
সন্নিবেশ (Summary):
ParameterizedType: এটি ব্যবহৃত হয় যখন আপনি জেনেরিক টাইপের প্যারামিটারগুলি (যেমনList<String>) অ্যাক্সেস করতে চান।- উদাহরণ:
List<String>এর মধ্যেStringহচ্ছে প্যারামিটারাইজড টাইপের আর্গুমেন্ট।
- উদাহরণ:
WildcardType: এটি ব্যবহৃত হয় wildcard টাইপ (যেমন? extends Tবা? super T) এর তথ্য সংগ্রহ করতে।- উদাহরণ:
List<? extends Number>এর মধ্যেNumberহচ্ছে upper bound wildcard টাইপের।
- উদাহরণ:
ParameterizedType এবং WildcardType দুটি রিফ্লেকশন বৈশিষ্ট্য যা জেনেরিক টাইপ সিস্টেমের গুরুত্বপূর্ণ অংশ। এই দুটি ব্যবহার করে আপনি টাইপের প্যারামিটার এবং wildcard সম্পর্কে তথ্য সংগ্রহ করতে পারেন এবং টাইপ সেফ কোড তৈরি করতে সাহায্য করে।
Read more