2017-04-04 15 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は、この応答のために(異なるパッケージ名を使用し、予約語であるI 'example'を使用します)。 JCodeModelと
  2. あなたが正規名を使用して「example.Foo.Bar

をクラスを参照する必要がありますあなたはそれを公開する場合にも、あなたが直接クラスを参照できます。

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

1.申し訳ありませんが、「パッケージ」を例として使用しました。私は実際のコードで正しいパッケージ名を使用します。私は私の質問を編集しました。 2.残念ながら、クラス名が入力として来てクラスパスに存在しないため、直接参照Bar.classを使用することはできません。 – forcelain

+0

ありがとうございます、あなたの2番目のポイントは私を助けました – forcelain

0

を生成します - 私は、最新の信じている:

あなたはこのようにクラス名を渡す必要があります以下のように2.6である。私は、同等のコードを使用してテストを行なったし、あなたがここに

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

はい、私は2.6を使用していません。 – forcelain

+0

これはJavaの予約語だと思うので「パッケージ」以外のパッケージを使用できますか? name - MyApp(Fooクラスと生成されたパッケージ)を試し、それが何をするかを見てください。実際には、Eclipseで試してみると、パッケージ内にFooクラスを作成することができて驚いています –

+0

申し訳ありませんが、「パッケージ」を例として使用しました。私は実際のコードで正しいパッケージ名を使用します。私は私の質問を編集しました。 – forcelain

関連する問題