📘 Module 11: Generics, Autoboxing & Wrapper Classes

नीचे दिया गया है एक आसान और शॉर्ट Generics Syntax Cheat Sheet – जो Java के Generics को जल्दी से revise करने और समझने के लिए बहुत उपयोगी है:


📄 Generics Syntax Cheat Sheet (Java)


🔹 1. Generic Class

class Box<T> {
    T value;
    void set(T value) { this.value = value; }
    T get() { return value; }
}

Usage:

Box<Integer> intBox = new Box<>();
Box<String> strBox = new Box<>();

🔹 2. Generic Method

public <T> void printArray(T[] array) {
    for (T item : array) {
        System.out.println(item);
    }
}

🔹 3. Generic Interface

interface Pair<K, V> {
    K getKey();
    V getValue();
}

class MyPair<K, V> implements Pair<K, V> {
    private K key;
    private V value;

    // constructor, getter, setter
}

🔹 4. Bounded Type Parameters

class NumberBox<T extends Number> {
    T value;
}

➡️ T अब सिर्फ Number या उसकी subclass (Integer, Double…) ही हो सकती है।


🔹 5. Multiple Bounds

class Demo<T extends Number & Comparable<T>> {
    T value;
}

➡️ T को Number भी होना होगा और Comparable भी implement करना होगा।


🔹 6. Wildcards in Generics

SyntaxMeaning
<?>Unknown type (any type)
<? extends T>Any subclass of T
<? super T>Any superclass of T

✅ Example:

List<?> list1;               // Any type
List<? extends Number> list2; // Integer, Double, etc.
List<? super Integer> list3;  // Integer, Number, Object

🔹 7. Generic ArrayList Declaration

List<String> names = new ArrayList<>();
List<Integer> numbers = new ArrayList<>();

🔹 8. Raw Type (❌ Avoid this)

List list = new ArrayList();   // Raw type, unsafe
list.add("Hello");
list.add(123);                 // Compile-time error नहीं आएगा

➡️ ❌ Recommended नहीं है — Type Safety ख़त्म हो जाती है।


✅ Bonus Tip: Type Erasure

Java में Compile time पर generics की type information हटा दी जाती है — इसे कहते हैं Type Erasure। इसलिए runtime पर generic type की जानकारी उपलब्ध नहीं होती।


🔚 Summary: जब Use करें —

SituationGenerics Use
Collection में specific type store करना होList<String>
Type-safe utility class बनानी होclass Box<T>
Generic method बनानी हो<T> void print(T val)
Flexibility चाहिए लेकिन control भीWildcards (?)