0

你如何返回一个成员变量(包含对象)

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

然后重置成员变量

  • 没有覆盖返回的成员变量的对象,让观察者获得之前的“副本”?

这是一个示例代码:

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
  }

}
4

1 回答 1

3

您已经拥有的代码可以执行您想要的操作。

this.notifyObservers(someObject)

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

this.someObject = new Object();

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

于 2013-04-04T21:40:52.237 回答