使用构造函数复制对象,Java

发布于 2024-09-27 13:04:31 字数 595 浏览 2 评论 0原文

假设我想制作一个对象的深层副本,但使用它的构造函数。所以我有:

public class PositionList {
    private Position[] data = new Position[0];
    private int size = 0;

public PositionList(PositionList other, boolean deepCopy) {
    if (deepCopy==true){
        size=other.getSize();
        for (int i=0;i<data.length;i++)
        data[i]=other.data[i];
    }
    else {
        data=other.data;
        size = other.size;

所以说我有这个被称为:

PositionList list = new PositionList();
PositionList acopy = new PositionList(list, true);

然而,我正在做的事情是不正确的,我不确定为什么..

So lets say I want to make a deep copy of an object, but using its contsructor. So I have:

public class PositionList {
    private Position[] data = new Position[0];
    private int size = 0;

public PositionList(PositionList other, boolean deepCopy) {
    if (deepCopy==true){
        size=other.getSize();
        for (int i=0;i<data.length;i++)
        data[i]=other.data[i];
    }
    else {
        data=other.data;
        size = other.size;

And so say I have this being called:

PositionList list = new PositionList();
PositionList acopy = new PositionList(list, true);

What I am doing, however, is incorrect, and Im not sure why..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吐个泡泡 2024-10-04 13:04:31

问题在于您的深度复制逻辑:

size=other.getSize();
for (int i=0;i<data.length;i++)
    data[i]=other.data[i];

您正在设置 size 字段(这与 data 数组是多余的),但没有将新数组分配给 data 字段,这可能是“深层”副本的全部要点。您应该将 data 初始化为对方的 size (或 other.data.length):(

data = new Position[other.data.length];
for (int i=0;i<data.length;i++)
    data[i]=other.data[i];

并去掉 size 全部在一起)

The problem lies in your deep copy logic:

size=other.getSize();
for (int i=0;i<data.length;i++)
    data[i]=other.data[i];

You are setting the size field (which is redundant with the data array) but are not assigning a new array to the data field, which is presumably the whole point of your "deep" copy. You should initialize data to the other's size (or other.data.length):

data = new Position[other.data.length];
for (int i=0;i<data.length;i++)
    data[i]=other.data[i];

(And get rid of size all together)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文