扩展通用抽象类和正确使用超级

11 java generics 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

如何正确调用super将AT泛型传递Tool给AbstractTool构造函数?

AT当我宣布Tool(Say,Tool<Thing>)时,似乎无论我选择什么,我总是回来AbstractThing而不是Thing.这似乎打败了仿制药的目的......

救命?

iny*_*iny 19

public class Tool<AT extends AbstractThing> extends AbstractTool<AT> {
Run Code Online (Sandbox Code Playgroud)

换句话说,如果使用泛型扩展或实现某些内容,请记住为它们定义泛型参数.