由于某种原因,当我从现有实例创建对象的新实例并更改新实例中的值时,它也会更改现有实例中的值。我希望它仅更改新实例中值的状态。我不确定为什么会这样。
Foo existing = new Foo(1, "foo");
for (int i = 0; i < 10; i++) {
Foo newFoo = existing;
System.out.println(newFoo.getName()); //Prints "foo" as expected
newFoo.setName("bar");
System.out.println(existing.getName()); //This prints out "bar"?
}
这两个对象都不是静态的。
您可以使用以下命令在运行时创建一个新实例:
Foo newFoo = existing.getClass().newInstance();
请注意,新创建的实例将不是该实例的副本existing
。
但是,如果确实需要该existing
对象的副本,则可以使用该Clonable
界面进行一些操作。
首先,您必须使Foo
该类实现Clonable
接口:
public class Foo implements Clonable { ... }
然后,您需要提供该clone()
方法的实现,该方法将返回您的对象的副本:
public Foo clone() {
return new Foo(this.id, this.name); //for example
}
最后,您可以clone()
像这样触发新引入的方法:
Foo newFoo = existing.clone();
这将为您提供一个新鲜的Foo
对象,但具有从existing
其中复制的属性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句