Người ta thường chấp nhận rằng các tổng quát Java đã thất bại theo một số cách quan trọng. Sự kết hợp của các ký tự đại diện và giới hạn dẫn đến một số mã nghiêm trọng không thể đọc được.
Tuy nhiên, khi tôi nhìn vào các ngôn ngữ khác, tôi thực sự dường như không thể tìm thấy một hệ thống loại chung mà các lập trình viên hài lòng.
Nếu chúng ta lấy những điều sau đây làm mục tiêu thiết kế của một hệ thống kiểu như vậy:
- Luôn tạo ra các khai báo kiểu dễ đọc
- Dễ học (không cần phải đánh vào hiệp phương sai, chống chỉ định, v.v.)
- tối đa hóa số lượng lỗi thời gian biên dịch
Có ngôn ngữ nào hiểu đúng không? Nếu tôi google, điều duy nhất tôi thấy là những lời phàn nàn về cách hệ thống hút ngôn ngữ X. Đây có phải là loại phức tạp vốn có trong cách gõ chung không? Chúng ta có nên từ bỏ việc cố gắng xác minh loại an toàn 100% tại thời điểm biên dịch không?
Câu hỏi chính của tôi là ngôn ngữ "làm cho đúng" là tốt nhất đối với ba mục tiêu này. Tôi nhận ra rằng đó là chủ quan, nhưng cho đến nay tôi thậm chí không thể tìm thấy một ngôn ngữ mà không phải tất cả các lập trình viên đều đồng ý rằng hệ thống loại chung là một mớ hỗn độn.
Phụ lục: như đã lưu ý, sự kết hợp giữa phân nhóm / kế thừa và tổng quát là những gì tạo ra sự phức tạp, vì vậy tôi thực sự tìm kiếm một ngôn ngữ kết hợp cả hai và tránh sự bùng nổ của sự phức tạp.
Foo<T> where SiameseCat:T
) và không có khả năng có loại chung chung không thể chuyển đổi được Object
. IMHO, .NET sẽ được hưởng lợi từ các loại tổng hợp tương tự như các cấu trúc, nhưng thậm chí còn trần hơn. Nếu KeyValuePair<TKey,TValue>
là một loại như vậy, thì một loại IEnumerable<KeyValuePair<SiameseCat,FordFocus>>
có thể được sử dụng IEnumerable<KeyValuePair<Animal,Vehicle>>
, nhưng chỉ khi loại đó không thể được đóng hộp.
easy-to-read type declarations
gì? Tiêu chí thứ ba cũng không rõ ràng: ví dụ: tôi có thể biến chỉ mục mảng ra khỏi giới hạn ngoại lệ thành lỗi thời gian biên dịch bằng cách không cho phép bạn lập chỉ mục mảng trừ khi tôi có thể tính toán chỉ mục tại thời gian biên dịch. Ngoài ra, các tiêu chí thứ hai quy định ra phân nhóm. Đó không hẳn là một điều xấu nhưng bạn nên biết những gì bạn đang hỏi.