我有一个简单的类,其中包含一堆原始变量,总共约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个地方手动同步数据。不愉快。
有没有更简单的方法来实现这一目标?我愿意接受编程解决方案或任何其他工作。我只想比看三个并排和变量匹配变量更容易。
谢谢。
答案 0 :(得分:2)
是的,您可以使用以下方法进行克隆:
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,虽然我从未使用过它
for equals()使用org.apache.commons.lang.builder.EqualsBuilder .reflectionEquals()