Vì vậy, tôi hiểu rằng những điều sau đây không hiệu quả, nhưng tại sao không hoạt động?Tại sao tôi không thể sử dụng đối số loại trong thông số loại có nhiều giới hạn?
interface Adapter<E> {}
class Adaptulator<I> {
<E, A extends I & Adapter<E>> void add(Class<E> extl, Class<A> intl) {
addAdapterFactory(new AdapterFactory<E, A>(extl, intl));
}
}
Phương pháp add()
mang lại cho tôi một lỗi biên dịch, "Không thể chỉ định bất kỳ Adaptor ràng buộc thêm <E> khi lần đầu tiên ràng buộc là một tham số kiểu" (trong Eclipse), hoặc "tham số Type có thể không được theo sau bởi giới hạn khác" (trong IDEA), hãy chọn.
Rõ ràng bạn không được phép sử dụng thông số loại I
ở đó, trước &
và đó là điều đó. (Và trước khi bạn yêu cầu, nó không hoạt động nếu bạn chuyển đổi 'em, bởi vì không có đảm bảo rằng I
không phải là một lớp cụ thể.) Nhưng tại sao không? Tôi đã xem qua câu hỏi thường gặp của Angelika Langer và không thể tìm thấy câu trả lời.
Nói chung khi một số giới hạn generics có vẻ tùy ý, đó là vì bạn đã tạo ra một tình huống mà hệ thống kiểu không thể thực thi chính xác. Nhưng tôi không hiểu trường hợp nào sẽ phá vỡ những gì tôi đang cố gắng làm ở đây. Tôi muốn nói có thể nó có liên quan đến phương pháp sau khi xóa, nhưng chỉ có một phương pháp add()
, vì vậy nó không giống như bất kỳ sự mơ hồ nào ...
Ai đó có thể giải quyết vấn đề cho tôi?
Trên thực tế, nếu điểm của nhiều giới hạn là kiểm soát việc xóa, điều đó hoàn toàn có ý nghĩa, bởi vì tôi sẽ chỉ xóa đối tượng. –