0

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

我希望有人能帮助我。

未处理类

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;
    }
}
4

1 回答 1

0

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

输入类:

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)实现这一点非常简单。如果您需要这方面的详细信息,请告诉我。

于 2014-07-14T21:11:52.303 回答