2012-11-16 90 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)實現此操作非常簡單。讓我知道你是否需要周圍的細節。