Được rồi, vì vậy Java không cho phép như sau:Generics và ký tự đại diện: Java thích "mới Foo <Bar<?>>"
Foo<?> hello = new Foo<?>();
Điều này làm cho sense-- sau khi tất cả, điểm của generics nếu bạn là gì chỉ cần hộp/unbox tất cả mọi thứ anyways?
Có gì lạ, là Java không cho phép điều này:
Foo<Bar<?>> howdy = new Foo<Bar<?>>();
Cấp, điều này thực sự hoàn thành hơn, mặc dù tại một số điểm, sẽ có một dàn diễn viên để có được bất cứ điều gì Bar
đang làm việc với. Nhưng nếu Java là okay với một số đặc hiệu, tại sao nó không cho phép điều này ?:
Foo<? extends Mal> bonjour = new Foo<? extends Mal>();
Lý do duy nhất tôi hỏi là tôi đang sửa chữa phải dựa vào các "ký tự đại diện trong một tham số lớp của một nhà xây dựng ", và nghiêm túc muốn biết ý nghĩa/ý định đằng sau nó.
EDIT: Để làm rõ câu hỏi của tôi, những điều khoản này được cho phép/không cho phép? Tôi biết rằng "Java không cho phép ký tự đại diện trong các nhà xây dựng", nhưng câu hỏi là, lý do tại sao tất cả sự kỳ quặc này? Tại sao các ký tự đại diện bị chặn không được phép nếu các ký tự đại diện lồng nhau được không?
Tôi nghĩ rằng tôi hiểu những gì bạn đang nói: nếu một nhà xây dựng chấp nhận một tham số lớp 'Mal', cá thể vốn đã chấp nhận bất kỳ thứ gì là lớp con của' Mal' (mặc dù _reference_ đối với cá thể sẽ không thể trỏ đến chung với một phân lớp trừ khi một ký tự đại diện được chỉ định.) – Philip
Nhìn nhận xét của tôi hơn một năm sau ... Tôi khá chắc chắn đó là một trong những điều khó hiểu nhất mà tôi từng nói. – Philip