用codemodel中的方法替换变量用法

时间:2012-11-16 15:52:30

标签: java code-generation sun-codemodel

我正在寻找一个解决方案,我可以在类中定义一个字段并使用此特定类中的引用。代码模型应该创建一个实例化字段的方法,并且应该用创建的方法替换字段用法。

我希望有人可以帮助我。

未处理的类

public class MyClass {
    @LazyInit
    CustomClass member;

    public void someMethod() {
        System.out.println(member);
    }
}

codeModel用法后的类

public class MyClass_ {
    @LazyInit
    CustomClass member;

    public void someMethod() {
        System.out.println(getInstanceOfMember());
    }

    public member getInstanceOfMember() {
        if (member == null)
            member == new CustomClass();

        return member;
    }
}

1 个答案:

答案 0 :(得分:0)

如果你稍微改变一下,那么这个问题会变得更容易管理。通过将变量更改为抽象getter方法,您可以在生成的类中执行惰性init,同时保留基类。这就是我的意思:

输入类:

public abstract class MyClass {
    @LazyInit
    public abstract CustomClass getMember();

    public void someMethod() {
        System.out.println(getMember());
    }
}

生成的类:

public class MyClass_ extends MyClass {

    private CustomClass member;

    public synchronized CustomClass getMember() {
        if (member == null){
            member == new CustomClass();
        }
        return member;
    }
}

然后,要使用此生成的类,您可以直接实例化它或使用实用程序:

new MyClass_().someMethod(); // prints CustomClass.toString() (non-null)

Lazy.get(MyClass.class).someMethod() // same

使用注释处理器和代码生成器(如JCodeModel)实现这一点非常简单。如果您需要有关详细信息,请与我们联系。