gpt4 book ai didi

java - 从现有实例创建新实例

转载 作者:搜寻专家 更新时间:2023-10-31 19:54:33 25 4
gpt4 key购买 nike

出于某种原因,当我从现有实例创建对象的新实例并更改新实例中的值时,它也会更改现有实例中的值。不过,如果它只更改新实例中值的状态,我会更喜欢。我不确定为什么会这样。

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

请注意,新创建的实例不会现有实例的副本。

但是,如果您确实需要拥有现有对象的副本,您可以使用Clonable接口(interface)。

首先,您必须使 Foo 类实现 Clonable 接口(interface):

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 对象复制的属性。

关于java - 从现有实例创建新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29333960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com