gpt4 book ai didi

java - 有没有更简单的方法来克隆具有数十个成员变量的对象?

转载 作者:行者123 更新时间:2023-12-02 07:18:05 29 4
gpt4 key购买 nike

Possible Duplicate:
How to properly override clone method?

我有一个简单的类,里面有一堆原始变量,总共大约 100-200 个。它的结构非常简单,如下所示:

public class Level implements Clonable {
int speed;
boolean wallKicks;
boolean bigMode;
float targetFrequency;
long milliseconds;
double fade;
int[] perfectPenalties;
<100 or so more things like this>
}

我需要能够克隆这个类。现在,我刚刚在我的clone()方法中显式地输入了每个成员变量的复制操作:

public Object clone() {
Level newLevel = new Level();
newLevel.speed = speed;
newLevel.wallKicks = wallKicks;
newLevel.bigMode = bigMode;
newLevel.perfectPenalties = perfectPenalties.clone();
<etc>
}

问题是,确保我的克隆方法中没有遗漏任何值是一项艰巨的任务。将来我还想实现一个 equals() 函数,这意味着我必须在 3 个地方手动同步数据。不愉快。

有没有更简单的方法来实现这一点?我愿意接受程序化解决方案或任何其他能完成这项工作的东西。我只是想有一些比并排查看三个变量和变量的匹配变量更容易的事情。

谢谢。

最佳答案

是的,您可以使用以下方法进行克隆:

1) 用于克隆对象的 Java 序列化机制:

ByteArrayOutputStream bout = new ByteArrayOutputStream();
out = new ObjectOutputStream(bout);

out.writeObject(obj);
out.close();

ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
in = new ObjectInputStream(bin);
Object copy = in.readObject();

2) apache.commons.lang 库有一个 org.apache.commons.lang.SerializationUtils .clone()

3) 使用dozer图书馆

4) 用户 Kyro ,虽然我从来没有用过

对于 equals() 使用 org.apache.commons.lang.builder.EqualsBuilder .reflectionEquals()

关于java - 有没有更简单的方法来克隆具有数十个成员变量的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14668791/

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