扩展通用抽象类和正确使用超级
public abstract class AbstractTool { protected ArrayList ledger; public AbstractTool() { ledger = new ArrayList(); } public AT getToolAt(int i) { return ledger.get(i); } // More code Which operates on Ledger ... } public class Tool extends AbstractTool { public Tool() { super(); } }
如何正确调用super将Tool
的AT
generics传递给AbstractTool构造函数?
当我宣布Tool
(Say, Tool
)时,似乎无论我选择AT
是什么,我总是得到一个AbstractThing
而不是Thing
。 这似乎打败了仿制药的目的……
帮帮我?
public class Tool extends AbstractTool {
换句话说,如果使用generics扩展或实现某些内容,请记住为它们定义generics参数。
不应该是Tool
?
我想你可能想要的是:
public abstract class AbstractTool { protected List ledger = new ArrayList (); public AT getToolAt(int i) { return ledger.get(i); } // More code Which operates on Ledger ... } public class Tool extends AbstractTool { // Tool stuff ... }
由于Tool
是一个具体的类,因此不需要对其进行参数化。 如果在声明时初始化List
(哦,并记得编程到接口),则不需要构造函数,并且因为它受到保护,所以子类可以直接访问它。