2012-11-16 59 views
0

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

我希望有人能帮助我。

codeModel使用后未经加工的类

public class MyClass { 
    @LazyInit 
    CustomClass member; 

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

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

你有什么试过的? [请阅读此。](http://mattgemmell.com/2008/12/08/what-have-you-tried/)尝试张贴一些代码。 – durron597

+0

你的问题不是很清楚,你可以尝试改写它。也许举一个小例子说明输入是什么,以及期望的输出是什么可以清除它。 –

+0

感谢提示 更新了代码示例的问题。 :) – alosdev

回答

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)实现此操作非常简单。让我知道你是否需要周围的细节。