Java 如何制作一个数组的副本,并以公共方法返回?

Java 如何制作一个数组的副本,并以公共方法返回?,java,arrays,Java,Arrays,基本上,我被告知,出于“未来”安全目的,我不应该让公共方法返回数组。相反,它们应该是私有的,如果我想返回一个数组,它必须是另一个方法中的某种副本 这就是现在的样子 public Object[] ownedObject() { return objectArr; } 如果我使这个私有类成为需要它的类,它就不会识别上面的方法 问题是我需要在said,other类中使用该数组中的内容,整个项目,正如我现在使用的5个不同的类一样,可以工作(返回的数组方法设置为Public而不是privat

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

这就是现在的样子

public Object[] ownedObject() {

    return objectArr;
}
如果我使这个私有类成为需要它的类,它就不会识别上面的方法


问题是我需要在said,other类中使用该数组中的内容,整个项目,正如我现在使用的5个不同的类一样,可以工作(返回的数组方法设置为Public而不是private)

由于您关心此问题的安全方面,您可能希望。如果数组包含可变对象,则可能需要数组中每个元素的深度副本,以确保状态不会从对象泄漏

假设数组的类型为
MyType
,包含:

public MyType[]ownedObject(){
MyType[]copyArr=新的MyType[objectArr.Length];
for(int i=0;i

还有其他方法。

当您关心此问题的安全性时,您可能会希望。如果数组包含可变对象,则可能需要数组中每个元素的深度副本,以确保状态不会从对象泄漏

假设数组的类型为
MyType
,包含:

public MyType[]ownedObject(){
MyType[]copyArr=新的MyType[objectArr.Length];
for(int i=0;i

还有其他方法。

这能回答您的问题吗?这回答了你的问题吗?啊,我明白了!它确实是一个复制构造函数。但是它有参数[String,String,int,int],所以在创建copyArr时不会将[i]作为参数。这给我带来了一些问题。或者,是否有任何合理的理由支持最初的方法保持公开,如果是的话,最大的风险是什么?啊,我明白了!它确实是一个复制构造函数。但是它有参数[String,String,int,int],所以在创建copyArr时不会将[i]作为参数。这给了我一些问题。或者,是否有任何合理的理由支持最初的方法保持公开,如果是的话,最大的风险是什么?
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;
}