Generics cung cấp type safety tại compile time: List<String> chỉ chấp nhận String.
- Type erasure: compiler xóa thông tin generic lúc runtime —
List<String>trở thànhList(raw type) trong bytecode. - Lý do: tương thích ngược với code trước generics.
- Hậu quả: không thể check
instanceof List<String>, không tạo đượcnew T[]. - Bounds:
<T extends Number>giới hạn kiểu. - Wildcards:
List<? extends Number>(read-only),List<? super Number>(write).