首页 > 解决方案 > 如何制作可以在公共方法中返回的数组的副本?

问题描述

基本上我被告知,出于“未来”安全目的,我不应该让公共方法返回数组。相反,它们应该是私有的,如果我想返回一个数组,它必须是另一种方法中的某种副本。

这就是现在的样子。。

public Object[] ownedObject() {

    return objectArr;
}

如果我将此设为私有,则需要它的类将无法识别上述方法。

事情是我需要在其他类和整个项目中使用该数组中的内容,因为我现在拥有 5 个不同的类,可以正常工作(返回的数组方法设置为公共而不是私有)。

标签: javaarrays

解决方案


当您关心这个问题的安全方面时,您可能想要区分数组的浅拷贝和深拷贝。如果您的数组包含可变对象,您可能需要数组中每个元素的深层副本,以确保状态不会从您的对象中泄漏。

假设您的数组是MyType具有复制构造函数的类型:

public MyType[] ownedObject() {
    MyType[] copyArr = new MyType[objectArr.lenght];
    for (int i = 0; i < objectArr.lenght; i++) {
        copyArr[i] = new MyType(objectArr[i]);
    }
    return copyArr;
}

还有其他方法可以深度复制对象


推荐阅读