Java Generics: Type Erasure, Invariance, Wildcards và nguyên tắc PECS

Java Generics không chỉ là cú pháp giúp bạn viết List thay vì List. Đằng sau Generics là cả một hệ thống quy tắc về an toàn kiểu, quan hệ giữa các kiểu dữ liệu, Type Erasure và Wildcards. Đặc biệt, để thiết kế API hiệu quả với Generics, bạn cần trả lời được một câu hỏi tưởng như đơn giản:  Nếu String là subtype của Object, tại sao List lại không phải là subtype của List? Câu trả lời nằm ở đặc tính cốt lõi: Generics trong Java là invariant (bất biến). Trong bài viết này, chúng ta sẽ cùng mổ xẻ từ bản chất của Invariance, cơ chế Type Erasure, Bridge Methods đến ứng dụng thực tế của Wildcards & PECS, từ đó rút ra các nguyên tắc thiết kế Generic API an toàn và tối ưu nhất. 1. Vì sao Java cần Generics? Trước JDK 5, Collections API chủ yếu làm việc với Object. Điều này cho phép một collection chứa nhiều loại đối tượng khác nhau, nhưng đổi lại lập trình viên phải tự chịu trách nhiệm kiểm tra và ép kiểu khi lấy dữ liệu ra. Ví dụ: List rawList = new ArrayList(); rawList.add(“Hello World”); […]
Nguồn: https://codegym.vn/blog/java-generics-type-erasure-invariance-wildcards-va-nguyen-tac-pecs/

Nhận xét

Bài đăng phổ biến