实现Arrays / ArrayLists的Getter和Setter方法的正确方法

问题描述 投票:2回答:2

为了说明我的担忧,我将使用以下不完整的测试类:

import java.util.ArrayList;
public class Test
{
    private int[] myArray = {1,2,3,4,5};
    private ArrayList<Integer> myArrayList = new ArrayList<Integer>();

    public int[] getMyArray()
    {
        int[] temp = new int[myArray.length];

        for(int i = 0;i<myArray.length;++i)
        {
            temp[i] = this.myArray[i];
        }

        return temp;
    }

    public ArrayList<Integer> getMyArrayList()
    {
        ArrayList<Integer> temp = new ArrayList<Integer>();

        for(int i = 0;i<myArrayList.size();++i)
        {
            temp.add(this.myArrayList.get(i));
        }

        return temp;
    }

    public void setMyArray(int[] newArray)
    {
        if(newArray.length!=myArray.length)
        {
            return;
        }

        for(int i = 0;i<myArray.length;++i)
        {
            this.myArray[i] = newArray[i];
        }
    }

    public void setMyArrayList(ArrayList<Integer> newArrayList)
    {
        for(int i = 0;i<myArrayList.size();++i)
        {
            this.myArrayList.add(newArrayList.get(i));
        }
    }
}

我用上面的代码说明了分别为Arrays和ArrayLists实现getter和setter方法的正确方法吗?我假设最好在getter方法中返回Arrays和ArrayLists的副本,以及在setter方法中设置Array / ArrayLists中的每个单独元素。如果这不正确,请说明实施这些方法的正确方法。

java arrays arraylist
2个回答
4
投票

这取决于你想要做什么,在某些情况下保持它有点不可变是有用的,这看起来像你想要的。你可以像这样简明扼要地编写方法。

private int[] myArray = {1,2,3,4,5};
private ArrayList<Integer> myArrayList = new ArrayList<Integer>();

public int[] getMyArray()
{
    return Arrays.copyOf(myArray, myArray.length);
}

public ArrayList<Integer> getMyArrayList()
{
    return new ArrayList<>(myArrayList);
}

public void setMyArray(int[] newArray)
{
    this.myArray =  Arrays.copyOf(newArray, newArray.length);
}

public void setMyArrayList(ArrayList<Integer> newArrayList)
{
    this.myArrayList = new ArrayList<>(newArrayList);
}

4
投票

如果您认为有必要,为阵列或ArrayLists实现getter和setter没有任何害处。

对于数组,有一个copyOfcopyOfRange方法,您可以使用这些方法将数组复制到新数组中而不是自己进行。

对于ArrayLists,有一个copy constructor,您可以使用它来构造一个包含指定集合的​​元素的新ArrayList,而不是自己做,以及将指定集合中的所有元素附加到另一个列表末尾的addAll方法。

至于:

我假设返回Arrays和ArrayLists的副本会更好

再次,它取决于你是否认为有必要使数组或ArrayList不可变,这取决于你想要实现的某些因素。

© www.soinside.com 2019 - 2024. All rights reserved.