Как добавить параметр общего типа в класс, который я расширяю с помощью JCodeModel?
Я играю с JCodeModel и пытаюсь создать класс; Благодаря этой ссылке я смог придумать это:
public final class CodeModelTest
{
private CodeModelTest()
{
throw new Error("no instantiation is permitted");
}
public static void main(final String... args)
throws JClassAlreadyExistsException, IOException
{
final JCodeModel model = new JCodeModel();
final JDefinedClass c = model._class("foo.bar.Baz");
c._extends(BaseParser.class);
final JMethod method = c.method(JMod.PUBLIC, Rule.class, "someRule");
method.body()._return(JExpr._null());
final CodeWriter cw = new OutputStreamCodeWriter(System.out,
StandardCharsets.UTF_8.displayName());
model.build(cw);
}
}
Итак, это работает. Сгенерированный код на stdout:
package foo.bar;
import com.github.fge.grappa.parsers.BaseParser;
import com.github.fge.grappa.rules.Rule;
public class Baz
extends BaseParser
{
public Rule someRule() {
return null;
}
}
Все идет нормально.
Теперь проблема в том, что я хотел бы extends BaseParser<Object>
и не BaseParser
... И я не могу понять, как это сделать, несмотря на то, что несколько часов гуглил...
Как мне это сделать?
2 ответа
Решение
Вам нужно вызвать узкий метод в конструкторе:
лайк
c._extends(BaseParser.class).narrow(yourClassHere);
Попробуй это:
JClass type = model.ref(BaseParser.class).narrow(Object.class);
c._extends(type);
Надеюсь это поможет.