Java 如何返回memberVariable(对象)并在不重置之前返回的成员变量的情况下重置它?

Java 如何返回memberVariable(对象)并在不重置之前返回的成员变量的情况下重置它?,java,Java,如何返回memberVariable(包含对象) 没有低效地复制(在内存中复制)成员变量的对象 然后重置成员变量 不重写返回成员变量的对象,以便获取之前的“副本”的观察者 下面是一个示例代码: public class SomeClass extends Observable { private Object someObject; private void whenSomethingHappens() { this.setChanged();

如何返回memberVariable(包含对象)

  • 没有低效地复制(在内存中复制)成员变量的对象
然后重置成员变量

  • 不重写返回成员变量的对象,以便获取之前的“副本”的观察者
下面是一个示例代码:

public class SomeClass extends Observable {

  private Object someObject;

  private void whenSomethingHappens() {
    this.setChanged();        
    this.notifyObservers(someObject); // TODO: return the object without copying it in RAM
    this.someObject = new Object(); // TODO: create a new empty object somwhere else in RAM such as it doesn't override the returned object of before
  }

}

您已经拥有的代码实现了您想要的功能

this.notifyObservers(someObject)
这会将对someObject的引用传递给方法
notifyObservers
。没有创建新对象,因此没有使用额外的内存(除了创建对现有对象的额外引用)


这将在内存中创建一个新对象,然后覆盖引用
someObject
。如果
notifyObservers
存储了对原始对象的引用,则它不受这一行代码的影响。

您已经拥有的代码会执行您想要的操作

this.notifyObservers(someObject)
这会将对someObject的引用传递给方法
notifyObservers
。没有创建新对象,因此没有使用额外的内存(除了创建对现有对象的额外引用)


这将在内存中创建一个新对象,然后覆盖引用
someObject
。如果
notifyObservers
存储了对原始对象的引用,则它不受这行代码的影响。

这些似乎是相反的要求。方法使用与存储在成员字段中的对象相同的对象(第一个要求),或者使用不同的对象(第二个要求)。在每一种情况下,都违反了另一个要求。我很难弄清楚你想要什么……尽管我怀疑它已经在做你想要的了。Java按值传递引用
NotifyObservators(someObject)
不会复制
someObject
(除非您在
NotifyObservators
实现中明确复制)。您不会。不复制就不能复制。不要过早地优化。副本可能不是问题。这些似乎是相反的要求。方法使用与存储在成员字段中的对象相同的对象(第一个要求),或者使用不同的对象(第二个要求)。在每一种情况下,都违反了另一个要求。我很难弄清楚你想要什么……尽管我怀疑它已经在做你想要的了。Java按值传递引用
NotifyObservators(someObject)
不会复制
someObject
(除非您在
NotifyObservators
实现中明确复制)。您不会。不复制就不能复制。不要过早地优化。复印件可能没问题。你说得太对了!抱歉搞混了!我确信它会覆盖传递的对象,但事实上它不会。我不敢相信我以前从未质疑或意识到这一点!当我用Java编程时,这刚刚改变了我的想法。:)谢谢!你说得太对了!抱歉搞混了!我确信它会覆盖传递的对象,但事实上它不会。我不敢相信我以前从未质疑或意识到这一点!当我用Java编程时,这刚刚改变了我的想法。:)谢谢!