gpt4 book ai didi

java - 复制对象不实例化

转载 作者:搜寻专家 更新时间:2023-11-01 03:39:03 24 4
gpt4 key购买 nike

我正在尝试创建我的 Board 对象的副本,但它似乎没有实例化。谁能告诉我为什么?

    class Board {
private Board _copyBoard;
private int _size;
public Board (int N) {
_size = N;
}
public Board (Board b) {
this._copyBoard = b;
}
int size() {
return _size;
}
}

当我这样做时:

    Board b = new Board(4);
Board x = new Board(b);
System.out.println(x.size()); --> 0 instead of 4.

最佳答案

复制构造函数通常应该复制实例变量,并在必要时复制一些深层状态——而不是保留对原始对象的引用。

您的 getter 和方法需要能够在对象自己的变量中操作对象自己的状态。到处都有某种双路径结构,if您自己的变量从其复制的原始实例的语句设计得很差,而且非常复杂/效率低下。

public class Board {
protected int size;
protected Cell[][] grid;
public Board (int N) {
this.size = N;
// for example, create a 2D array.
this.grid = new Cell[size][size];
}
public Board (Board orig) {
this.size = orig.size();
// deep-copy the grid.
this.grid = new Cell[size][];
for (int i = 0; i < size; i++) {
grid[i] = Arrays.copyOf( orig.grid[i], size);
}
}
public int size() {return size;}
}

我非常喜欢 protected超过私有(private),以获得更大的多功能性和工程访问。

我也不使用字段前缀,而是使用 this. 消除字段赋值(在 setter 或其他方法中)的歧义| .这种方法对于简单字段非常有效。

对于集合,我在我的字段名后加上 List 或 Map 或其他任何东西;参数命名时不带后缀。这使得具有复数的复数操作和方法调用变得清晰。例如,add (List<Customer> customers)会将这些添加到字段 customerList .

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

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