2016-03-15 59 views
0

我在玩JCodeModel并试图创建一个类;由于this link我能够拿出这个:如何向通过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 ...而且我无法弄清楚如何做google搜索周围的,尽管相当多的时间...

怎么办我这样做?

回答

0

你需要调用narrow方法在构建器:

c._extends(BaseParser.class).narrow(yourClassHere); 
+0

没有骰子......至少在这里不起作用。对你起作用吗? – fge

+0

好的,谢谢你的帖子和其他阅读,我发现了。你在这里实际需要的是缩小_extended class_,而不是主要的。因此,解决方案是使用'JCodeModel'实例来生成:'model.ref(BaseParser.class).narrow(Object.class)' – fge

0

试试这个:

JClass type = model.ref(BaseParser.class).narrow(Object.class); 
c._extends(type); 

希望这有助于。