पाठ 30 / 38
जेनरिक्स बुनियाद
अपनी क्लास व मेथड में टाइप पैरामीटर जोड़ें ताकि कम्पाइलर हर उपयोग जाँचे और मान वापस पढ़ते समय कभी cast न करना पड़े।
एक जेनरिक क्लास
टाइप पैरामीटर <T> एक प्लेसहोल्डर है जिसे कॉलर भरता है। कम्पाइलर हर उपयोग जाँचता है।
class Box<T> {
private T item;
void put(T item) { this.item = item; }
T get() { return item; }
}
Box<String> b = new Box<>();
b.put("hi");
String s = b.get(); // no castजेनरिक मेथड
एक मेथड अपना खुद का टाइप पैरामीटर घोषित कर सकता है, चाहे वह किसी भी क्लास में हो। कम्पाइलर पास किए गए आर्ग्युमेंट से T तय करता है।
static <T> T firstOf(List<T> items) {
return items.get(0);
}
String s = firstOf(List.of("a", "b")); // T inferred as String
Integer n = firstOf(List.of(1, 2, 3)); // T inferred as Integerसीमाबद्ध टाइप पैरामीटर
<T extends Comparable<T>> T को उन टाइप तक सीमित करता है जो comparable हों, ताकि मेथड बॉडी T के मानों पर compareTo बुला सके। यहाँ extends क्लास व इंटरफ़ेस दोनों के लिए "सबटाइप है" का मतलब रखता है।
static <T extends Comparable<T>> T max(T a, T b) {
return a.compareTo(b) >= 0 ? a : b;
}
max(3, 7); // 7
max("pear", "fig"); // "pear"