public abstract class AbstractTool<AT extends AbstractThing> {
protected ArrayList<AT> ledger;
public AbstractTool() {
ledger = new ArrayList<AT>();
}
public AT getToolAt(int i) {
return ledger.get(i);
}
// More code Which operates on Ledger ...
}
public class Tool<AT extends AbstractThing> extends AbstractTool {
public Tool() {
super();
}
}
Làm cách nào để gọi chính xác siêu vượt qua AT
chung của Tool
cho hàm tạo AbstractTool?Mở rộng Lớp Tóm tắt Chung & Sử dụng Chính xác Siêu
Có vẻ như không có vấn đề gì tôi chọn AT
là khi tôi tuyên bố Tool
(Say, Tool<Thing>
), mà tôi luôn nhận lại một AbstractThing
thay vì Thing
. Điều này dường như đánh bại mục đích của generics ...
Trợ giúp?
Thực tế trong trường hợp này, vì các ràng buộc kiểu trên tham số chung của AbstractTool sẽ được kế thừa, bạn chỉ có thể viết 'public class Tool mở rộng AbstractTool '. Điều này sẽ có chức năng tương đương vì định nghĩa của AbstractTool sẽ ngăn bạn sử dụng một tham số chung không phải là 'AbstractThing'. –