【问题标题】:How to set a field with out creating an object in javajava - 如何在不创建对象的情况下设置字段
【发布时间】:2016-01-13 03:48:28
【问题描述】:

我无法修改 A 类或 B 类。A 类和 B 类的规模都很大(有几个嵌套的类和数百个参数)。对于多线程,内存占用会影响性能。我正在检查所有减少内存使用的方法。基本上我试图限制 B 类实例的范围,以便 GC 最早可以对其进行处理。 (供您参考:我已经知道我可以做到 B b = new B(); b.setS("Calm Down"); a.setB(b);)

这是场景:

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")); 
}

所以我猜 new B() 是 setB() 的本地。所以在下一行 new B() 超出了范围。

但是在 Eclipse 中,我得到了 setB() 不能接受 void 的错误。我猜是 setS() 返回 void。

可能是我遗漏了一些概念。但我想要这么简单的东西。如何实现这一点。

【问题讨论】:

  • 公开 B setB (B b){this.b = b;返回这个;} } 对不起。我错过了返回类型。谢谢

标签: java json multithreading


【解决方案1】:

您可以尝试在 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),这将为该 A 对象设置对象 S。

【讨论】:

  • 我无权访问 A 类或 B 类。B 类很大。由于有多个线程进行映射,内存占用会影响性能。
【解决方案2】:

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);
}

【讨论】:

    【解决方案3】:

    你正在尝试的是错误的。 setS() 不返回 B 实例。 您不会通过编写单行代码来节省任何资源。 如果您将 B 设置为 A,只要 A 引用 B,GC 也不会清理任何内容。

    【讨论】:

      【解决方案4】:

      我使用构建器设计模式得到它。感谢 lombok 的 @Builder。

      谢谢大家。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        • 2014-06-09
        • 2012-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多