2016-01-13 22 views
-3

我無法修改A類或B類。並且A類& B的尺寸很大(有幾個嵌套類和數百個參數)。而多線程,內存足跡正在影響性能。我正在檢查所有的方法來減少內存使用量。基本上,我試圖限制B類實例的範圍,以便GC可以儘早處理它。 (你的信息:我已經知道我可以通過B b = new B(); b.setS(「Calm Down」); a.setB(b);)如何在java中設置創建對象的字段

這裏是場景:

Class A{ 
private B b; 
public getB{return b} 
public void setB (B b){this.b = b;} 
} 

Class B{ 
private String s; 
//getters and setters for s} 

Class MyNeed{ 
A a = new A(); 

// Here I'm trying to create an obj B and set S and then pass that obj to a.setB(). 
a.setB (new B().setS("Param S Set")); 
} 

所以我想新的B()對setB()是局部的。所以在下一行中新的B()超出了範圍。

但在eclipse中這種方式,我得到錯誤,setB()不能接受無效。我想這是setS()返回void。

可能是我錯過了一些概念。但我想要有這麼簡單的東西。如何實現這一點。

回答

0

你可以嘗試有A類內的構造

class A{ 
    private B b; 
    public B getB(){ 
     return b; 
    } 
    public void setB (B b){ 
     this.b = b;} 
    } 
    public A(S s){ 
     this.S = s; 
    } 
} 

所以當你做a.setB(),你可以做a.setB(s),並且將設置對象S爲一個目的。

+0

我對A類或B類都沒有任何訪問權。而B類是巨大的。多線程進行映射時,內存足跡影響性能。 –

0

a.setB (new B().setS("Param S Set"));

好吧,這個說法開始通過創建一個新的B實例然後調用該實例上setS方法,傳遞字符串"Param S Set"。最後,它調用a.setB(...)傳遞setS()調用返回的值。

正如你所知,這是行不通的,因爲setS()返回void

可能是我錯過了一些概念。但我想要有這麼簡單的東西。如何實現這一點。

{ 
    B b = new B(); 
    b.setS("Param S Set"); 
    a.setB(b); 
} 
0

你正在嘗試是錯誤的。 setS()不返回B實例。 您不會通過編寫單行程序來保存任何資源。 只要A對B有參考,GC也不會清除任何東西。

0

我使用了構建器設計模式。感謝lombok的@Builder。

謝謝大家。