[英]Extending Generic Abstract Class & Correct Use of Super
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();
}
}
如何正確調用super將Tool
的AT
泛型傳遞給AbstractTool構造函數?
看來不管我挑AT
要當我宣布Tool
(比如Tool<Thing>
),我總是回一個AbstractThing
,而不是Thing
。 這似乎打敗了仿制葯的目的......
救命?
public class Tool<AT extends AbstractThing> extends AbstractTool<AT> {
換句話說,如果使用泛型擴展或實現某些內容,請記住為它們定義泛型參數。
不應該是Tool<AT extends...> extends AbstractTool<AT>
?
我想你可能想要的是:
public abstract class AbstractTool<AT extends AbstractThing> {
protected List<AT> ledger = new ArrayList<AT>();
public AT getToolAt(int i) {
return ledger.get(i);
}
// More code Which operates on Ledger ...
}
public class Tool extends AbstractTool<Thing> {
// Tool stuff ...
}
由於Tool
是一個具體的類,因此不需要對其進行參數化。 如果你在聲明時初始化List
(哦,並記得編程到接口),則不需要構造函數,並且因為它受到保護,所以子類可以直接訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.