java - 如何制作可以在公共方法中返回的数组的副本?
问题描述
基本上我被告知,出于“未来”安全目的,我不应该让公共方法返回数组。相反,它们应该是私有的,如果我想返回一个数组,它必须是另一种方法中的某种副本。
这就是现在的样子。。
public Object[] ownedObject() {
return objectArr;
}
如果我将此设为私有,则需要它的类将无法识别上述方法。
事情是我需要在其他类和整个项目中使用该数组中的内容,因为我现在拥有 5 个不同的类,可以正常工作(返回的数组方法设置为公共而不是私有)。
解决方案
当您关心这个问题的安全方面时,您可能想要区分数组的浅拷贝和深拷贝。如果您的数组包含可变对象,您可能需要数组中每个元素的深层副本,以确保状态不会从您的对象中泄漏。
假设您的数组是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;
}
还有其他方法可以深度复制对象。
推荐阅读
- azure - 从 Staging 切换到 Prod 后 CDN 的工作原理
- html - Flex - 儿童固定位置和 100% 高度
- android - 字符串混合从内部存储读取
- javascript - 如何在本地服务器上托管 openlayer 示例?
- c++ - 为什么 valgrind 和 gdb 指向不同的代码行?或者:如何在循环中分配指针的 malloc() 和 free() 指针?
- amazon-web-services - 如何在 AWS S3 支持的网站中重定向裸 URL?
- python - (id,title)=line.split('|')[0:2] 是做什么的?
- javascript - 每个域的后台共享存储和 chrome 扩展中的弹出窗口
- selenium - Robot Framework-加载微调器选择器
- python - 显示静态文件 Django 和 rest-framework