2016-01-13 78 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。

谢谢大家。

相关问题