importjava.util.ArrayList;
publicclass Demo {
class Expr {}
abstractclass Factory <T extends Expr>{
abstract T generate();
}
classStatementextends Expr {};
class Factory2 extends Factory<Statement>{
Statement generate(){
returnnewStatement();
}
}
class FactoryList extendsArrayList<Factory>{
Factory f2 = new Factory2();
Statement s = f2.generate();// compiler demands a cast to Statement
}
}
Doesn't Factory2 produce Statements?