gpt4 book ai didi

java - 复制对象

转载 作者:行者123 更新时间:2023-12-01 15:39:35 28 4
gpt4 key购买 nike

我试图复制一个对象,但没有成功。我试过了

  1. 序列化
  2. 克隆

这两种方法都不适合我。

当我使用序列化时(我正在使用此处指定的技术Faster Deep Copies of Java Objects),我得到了NullPointerException。通过克隆,我获得了原始对象引用。

场景是:

我有一个带有数据 char[][] board 的抽象类 A 和一个扩展类 B。我想复制数据 board 为此我在 B 中实现了两个方法 - getboard()setboard() > 并实现了一个克隆方法,使得

B b1 = new B;
B.initialize();
B b2 new B;
B2 = B1.clone(B2)

但这不起作用。任何帮助将不胜感激。

谢谢:-)

       public B clone()  {

B N = new B();
try {
N = (B)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
N.setBoard(this.getBoard());
return N;
}

关于序列化,反序列化后,当我尝试绘制板时,它给了我NullPointerException。我的结论是,反序列化无法正常工作。

最佳答案

重写B中的clone方法:

public class B {
private int f1;
private String f2;

@Override
public B clone() {
B clone = new B();
clone.f1 = this.f1;
clone.f2 = this.f2;
return clone;
}
}

并用它来创建副本:

B b1 = new B();
//...
B b2 = b1.clone();

更新:

public B clone()  {
B N = new B();
try {
N = (B)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
N.setBoard(this.getBoard());
return N;
}

尝试以下操作(假设B实现Cloneable):

@Override
public B clone() throws CloneNotSupportedException {
return (B) super.clone();
}

更新:

board的自定义实现:

class B implements Cloneable {
private char[][] board;

@Override
public B clone() throws CloneNotSupportedException {
B clone = (B) super.clone();
clone.board = new char[this.board.length][];
for(int i=0; i<this.board.length; i++) {
clone.board[i] = new char[this.board[i].length];
System.arraycopy(this.board[i], 0, clone.board[i], 0, this.board[i].length);
}
return clone;
}

public char[][] getBoard() {
return board;
}

public void setBoard(char[][] board) {
this.board = board;
}

@Override
public String toString() {
return Arrays.deepToString(this.board);
}
}

关于java - 复制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8289810/

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