我正在寻找一个解决方案,我可以在类中定义一个字段并使用此特定类中的引用。代码模型应该创建一个实例化字段的方法,并且应该用创建的方法替换字段用法。
我希望有人可以帮助我。
未处理的类
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;
}
}
答案 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)实现这一点非常简单。如果您需要有关详细信息,请与我们联系。