2016-03-15 63 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); 

希望這有助於。