Bạn là có thể kế thừa từ siêu kiểu có thông số loại chung. Ví dụ:
public class MyList<T> extends AbstractList<T>
(hoặc thậm chí cung cấp các thông số giới hạn, ví dụ):
public class MyStringList extends AbstractList<String>
Bạn đang không thể xác định một lớp học có một siêu kiểu ký tự đại diện. Một khái niệm như vậy không có ý nghĩa gì trong Java (và tôi không tin rằng nó có nhiều giá trị trong bản tóm tắt). Trong ví dụ MonitoredDevice
của bạn, tôi thậm chí không chắc chắn chức năng nào bạn mong đợi ở đó.
Vì việc xóa bỏ điều này đơn giản là không thể ở mức cơ bản của cách Java hoạt động. Mỗi lớp phải có một lớp cha - lớp bậc trên của MonitoredDevice
là gì? Phương pháp nào có sẵn trên đối tượng MonitoredDevice
? Bạn sẽ không thể gọi bất kỳ phương thức kế thừa nào trong lớp này vì trình biên dịch không thể đảm bảo các phương thức như vậy tồn tại, cũng như không thể bytecode đại diện cho các cuộc gọi như vậy.
Tôi nghi ngờ rằng những gì bạn đang cố gắng thực hiện có thể đạt được tốt hơn với dynamic proxies.
Chỉnh sửa: OK, sau khi đọc toàn bộ bài viết tôi có thể thấy động lực đằng sau tuyên bố như thế nào. Nhưng sau khi đọc bài báo đầy đủ, bạn cũng nhận ra rằng điều này không được hỗ trợ bởi Java hiện nay. Lý do cơ bản tại sao là do tẩy xoá; một kỹ thuật như vậy sẽ không bao giờ có thể thực hiện được dưới cơ chế hiện tại, và bài báo đi sâu vào chi tiết hơn về những gì cụ thể ngăn cản việc này hoạt động.
Nguồn
2010-01-04 16:36:29
Bạn có thể hiển thị cho chúng tôi khai báo từ mã của bạn ... có vẻ như bạn đang sử dụng sai cú pháp. –