Hãy xem ý nghĩa của điều này bằng tiếng Anh đơn giản.
class A[X]
có nghĩa là: hãy là một lớp có một tham số loại.
class C[M[X] <: A[X]]
có nghĩa là: hãy C là một lớp mà có một tham số kiểu, mà phải là một lớp mà có một tham số kiểu AND, tham số, là một lớp con của lớp Một tham số với cùng một loại.
Khi bạn viết
new C[A]
bạn đang nói: tạo một thể hiện của C với A như tham số. A có tuân theo các tiêu chí trên không? Có, đó là một lớp có một tham số kiểu, và tham số hóa nó là một lớp con của chính nó được tham số hóa.
Tuy nhiên, khi bạn viết
new C[A[Int]]
tham số kiểu bạn đang cố gắng để cung cấp cho C, A [Int], không phù hợp với các tiêu chí: A [Int] không mất bất kỳ thông số chủng loại, mà trình biên dịch vui lòng cho bạn biết. (Và nó cũng không phải là phân lớp của A [X].)
Nguồn
2011-01-06 14:49:43
điều này cũng không thực hiện được công việc. Vấn đề là C mong đợi một loại có tham số kiểu. Khi bạn thử C [A] mới, nó sẽ hoạt động, bởi vì A lấy đối số kiểu. – tim
Điều này sẽ không hoạt động - C bây giờ mong đợi hai tham số kiểu. – gpampara