2017-04-04 40 views
1

如何從內部靜態類擴展生成的類?使用代碼模型擴展內部類

舉例來說,我有

class Foo { 
    static class Bar { 
    } 
} 

而且我想我生成的類從酒吧

延長
JCodeModel codeModel = new JCodeModel() 
JClass aClass = codeModel.ref("somePckg.Foo$Bar") 
JPackage jp = codeModel._package("pckag") 
JDefinedClass jc = jp._class("GeneratedClass") 
jc._extends(aClass) 
codeModel.build(new File("generated/")) 

我得到的是

import somePckg.Foo$Bar; 
public class GeneratedClass extends Foo$Bar {} 

但我要的是

import somePckg.Foo; 
public class GeneratedClass extends Foo.Bar {} 

解決方案

你應該把類名是這樣的:

codeModel.ref("android.support.v7.widget.RecyclerView.ViewHolder") 

而且CodeModel將您正在使用什麼版本codemodel的產生

package pckg; 

import somePckg.Foo.Bar; 

public class GeneratedClass extends Bar { 
} 
+0

你可能需要進口或者導入靜態Foo。* –

回答

0

一對夫婦的問題,這裏的結果:

  1. package是一個保留字,使用不同的包名(對於這個迴應,我將使用example)。
  2. 與JCodeModel你應該使用規範名稱引用類「example.Foo.Bar

此外,您可以參考類直接,如果你把它公開:

JClass aClass = codeModel.ref(Bar.class); 
+0

1.抱歉,我僅以「包裝」爲例。我在真實代碼中使用了正確的軟件包名稱。我編輯了我的問題。 2.不幸的是,我不能使用直接引用Bar.class,因爲類名作爲輸入,並且不存在於我的類路徑中。 – forcelain

+0

謝謝,你的第二點幫助了我 – forcelain

0

- 我相信最新按照以下2.6。我只是做了具有可比性的代碼測試,並得到了你正在尋找

<dependency> 
    <groupId>com.sun.codemodel</groupId> 
    <artifactId>codemodel</artifactId> 
    <version>2.6</version> 
</dependency> 
+0

是的,我使用2.6沒有成功 – forcelain

+0

你可以嘗試使用'包'以外的包,因爲我相信這是Java中的保留字,因此不應該用作包名稱 - 嘗試MyApp(用於Foo類和生成的包)並查看它的功能。其實我很驚訝你可以在包中創建Foo類,如果你在Eclipse中嘗試它,它會阻止它 –

+0

對不起,我用「包」作爲例子。我在真實代碼中使用了正確的軟件包名稱。我編輯了我的問題。 – forcelain