Java Generics
Java Generics
Section titled βJava Genericsβ1. What are generics in Java and why were they introduced?
Section titled β1. What are generics in Java and why were they introduced?βGenerics allow us to write classes, interfaces, and methods that operate on specific data types while still being reusable. They were introduced to provide type safety and avoid runtime ClassCastException.
List<String> names = new ArrayList<>();Now only String values can be added.
2. How do generics provide type safety?
Section titled β2. How do generics provide type safety?βGenerics ensure the type of data is checked at compile time. This prevents adding the wrong data type into a collection.
List<Integer> list = new ArrayList<>();list.add("Hello"); // Compile-time error β safe3. What is the difference between generics in compile-time vs run-time?
Section titled β3. What is the difference between generics in compile-time vs run-time?β- Compile-time: Generics enforce type checking.
- Run-time: Generic type information is removed (due to type erasure).
List<Integer> a = new ArrayList<>();List<String> b = new ArrayList<>();System.out.println(a.getClass() == b.getClass()); // true4. Difference between List<Object> and List<?>
Section titled β4. Difference between List<Object> and List<?>β| Feature | List<Object> | List<?> |
|---|---|---|
| Accepts | Any object | Any generic list |
| Add elements | Yes | No (except null) |
| Use case | Insert values | Read-only access |
5. What are bounded type parameters? Example using extends and super
Section titled β5. What are bounded type parameters? Example using extends and superβBounded type parameters restrict the type that can be used.
<T extends Number> // Upper bound: T must be Number or its subclass<? super Integer> // Lower bound: Type must be Integer or its parent6. Meaning of <T extends Number>
Section titled β6. Meaning of <T extends Number>βT can only be:
Numberor its subclasses (Integer,Double,Float, etc.)
public class Test<T extends Number> { }7. When should you use ? extends and when ? super?
Section titled β7. When should you use ? extends and when ? super?β| Use | Meaning | Purpose |
|---|---|---|
? extends T | Any subclass of T | Read Only (Producer) |
? super T | Any superclass of T | Write Allowed (Consumer) |
Easy rule: PECS β Producer Extends, Consumer Super
8. What is a generic method? Example
Section titled β8. What is a generic method? ExampleβA method that defines its own type parameter.
public static <T> void print(T value) { System.out.println(value);}9. Can we use primitive types with generics? Why not?
Section titled β9. Can we use primitive types with generics? Why not?βNo, because generics work only with objects, and primitives are not objects. We use wrapper classes:
| Primitive | Wrapper |
|---|---|
| int | Integer |
| double | Double |
List<int> // βList<Integer> // β
10. Can a generic class have multiple type parameters? Example <K, V>
Section titled β10. Can a generic class have multiple type parameters? Example <K, V>βYes. Commonly used in Map implementations.
class Pair<K, V> { K key; V value;}
Pair<String, Integer> p = new Pair<>();