我正在尝试深复制我的自定义对象“ Space”的数组,该数组扩展了Javafx Pane。
我尝试使用Kryo库并实现可克隆的。我可以使用实际上不深层复制的变通办法,但这会使我的代码更加混乱100倍。
当前我有班级:
public class Space extends Pane {
private boolean available = true;
private boolean light;
private int x;
private int y;
private Peice peice;
private Label peiceImage;
private Rectangle border;
public Space() {}
public Space(int x, int y, boolean light) {
border = new Rectangle(80,80);
if (!light) {
border.setFill(Color.DARKGREEN);
border.setStroke(Color.DARKGREEN);
} else {
border.setFill(null);
border.setStroke(null);
}
peiceImage = new Label();
peiceImage.setTranslateX(16);
peiceImage.setTranslateY(16);
getChildren().addAll(border,peiceImage);
this.x = x;
this.y = y;
this.peice = null;
this.light = light;
}
//other unimportant methods.
}
然后我尝试复制另一个文件:
public Space[][] copyBoard(Space[][] thisBoard) {
Kryo kryo = new Kryo();
Space[][] copy = new Space[8][8];
for (int x = 0; x < 8; x++) {
for (int y = 0; y < 8; y++) {
Space thisSpace = thisBoard[x][y];
try {
kryo.setRegistrationRequired(false);
copy[x][y] = kryo.copy(thisSpace); //TODO This causes exception, dosent work
} catch (Exception e) {
System.out.println(e);
}
}
}
return copy;
}
尝试使用kryo库时出现此错误:
com.esotericsoftware.kryo.KryoException: Class cannot be created (missing no-arg constructor): javafx.scene.layout.Region$3
但是我丝毫不致力于使用kryo。
谢谢。
答案 0 :(得分:-1)
您可以使用序列化和随后的反序列化进行深度复制。 Web上有不错的工具。例如,来自Apache的SerializationUtils。
您可以执行以下操作:
Space clonedSpace = SerializationUtils.clone(space);