簡體   English   中英

擴展通用抽象類和正確使用超級

[英]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將ToolAT泛型傳遞給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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM