Java 如何返回memberVariable(对象)并在不重置之前返回的成员变量的情况下重置它?
如何返回memberVariable(包含对象)Java 如何返回memberVariable(对象)并在不重置之前返回的成员变量的情况下重置它?,java,Java,如何返回memberVariable(包含对象) 没有低效地复制(在内存中复制)成员变量的对象 然后重置成员变量 不重写返回成员变量的对象,以便获取之前的“副本”的观察者 下面是一个示例代码: public class SomeClass extends Observable { private Object someObject; private void whenSomethingHappens() { this.setChanged();
- 没有低效地复制(在内存中复制)成员变量的对象
- 不重写返回成员变量的对象,以便获取之前的“副本”的观察者
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编程时,这刚刚改变了我的想法。:)谢谢!