javasun-codemodeljcodemodel

Extend inner class using code model


How can I extend my generated class from an inner static class?

For instance, I have

class Foo {
    static class Bar {
    }
}

And I want my generated class to be extended from 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/"))

What I get is

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

But what I want is

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

Solution:

You should pass the class name like this:

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

And CodeModel will generate

package pckg;

import somePckg.Foo.Bar;

public class GeneratedClass extends Bar {
}

Solution

  • A couple problems here:

    1. package is a reserved word, use a different package name (For this response I'll use example).
    2. with JCodeModel you should reference the class using the canonical name "example.Foo.Bar"

    Also, you could reference the class directly if you make it public:

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