पाठ 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"