Search code examples
javagenericssun-codemodel

codemodel narrow for generics


I would like to generate a new class as follows:

public class QueryBuilder_QueryField
extends AbstractQueryBuilder<QueryBuilder_QueryField>

and i tried this but it doesn't narrow the extends...

JCodeModel model = new JCodeModel();
String fqcn = packageName + "." + className;
JDefinedClass builderClass = model._class(fqcn);
builderClass._extends(AbstractQueryBuilder.class).narrow(builderClass);

but instead ends up like

public class QueryBuilder_QueryField
extends AbstractQueryBuilder

any ideas?


Solution

  • I believe you need to narrow before you pass the class into _extends():

    JCodeModel model = new JCodeModel();
    String fqcn = packageName + "." + className;
    JDefinedClass builderClass = model._class(fqcn);
    builderClass._extends(model.ref(AbstractQueryBuilder.class).narrow(builderClass));
    

    Generates:

    public class QueryBuilder_QueryField
    extends AbstractQueryBuilder<QueryBuilder_QueryField>