In Java, Generics are a compile-time feature.
They ensure type safety by checking the types at compile time — but at runtime, they don’t exist in the same way you wrote them.
⚙️ How it works:
- The compiler enforces the correct type usage
- At compile time, type parameters () are replaced with their bounds (or Object if unbounded)
- All extra type information is removed — this is called Type Erasure
🧩 Type Erasure
➡️ The process where the compiler removes all generic type information before runtime.
Example:
List list = new ArrayList<>();
At runtime, it’s just a List — the is gone.
📌 Why?
Backward compatibility with older Java versions (pre-Java 5)
Keeps the JVM simpler (no separate class for each type)
💡 Takeaway:
Generics give you compile-time safety, but no runtime type checks for parameterized types.
Go further with Java certification:
Java👇
Spring👇