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();
}
}
Jak poprawnie nazywać Super zdać AT
generycznym Tool
do konstruktora AbstractTool?Rozszerzenie Generic Abstract Class & Prawidłowe użycie Super
Wydaje się bez względu na to, co wybiorę AT
być kiedy Oświadczam Tool
(powiedzmy, Tool<Thing>
), że ja zawsze wrócić się AbstractThing
zamiast Thing
. Wydaje się, że to nie jest celem generycznych ...
Pomoc?
W tym przypadku, ponieważ ograniczenia typu na typowym parametrze AbstractTool będą dziedziczone, można po prostu napisać 'public class Tool extends AbstractTool '. Byłby to funkcjonalny odpowiednik, ponieważ definicja AbstractTool zatrzymałaby Cię przy użyciu ogólnego parametru, który nie byłby "AbstractThing". –