ここでかなりの提供@zpostenもののようである私の答え、ですが、また、OPのdata[] array created at another function
要件のアドレス:
public class EncapsulatedArray
{
private final int[] data;
public EncapsulatedArray(final int[] data)
{
this.data = data;
}
public int getPixel(final int i)
{
return data[i];
}
public void setPixel(final int i, final int x)
{
data[i] = x;
}
@Override
public String toString()
{
return Arrays.toString(data);
}
}
検証し、実証するために、私が使用:
public class EncapsulatedArrayDemo
{
public static void main(final String[] args)
{
final int[] dataFromElsewhere = { 0, 1, 2, 3 };
final EncapsulatedArray ex = new EncapsulatedArray(dataFromElsewhere);
System.out.println(ex);
ex.setPixel(2, 7 + ex.getPixel(2));
System.out.println(ex);
}
}
を
を入手し、コンソールに以下を取得しました。
{ 0, 1, 2, 3 }
{ 0, 1, 9, 3 }
この(おもちゃ)のようなラッパークラスが便利な理由はいくつかありますが、データ配列を外部の変更(つまり、変更)から「保護する」ことを望むのであれば、さまざまな理由があります。 setPixel(int, int)
だけがdata
の値を変更することが許可されていれば、data
の配列オブジェクトをラッパーから逃げることはできません@ zpostenの答えのようなものが必要になります。データ配列created at another function
を使用する必要がある場合は、私の解決策のようなものが必要ですが、配列がラッパーの背後で手抜きされないようにするためには、別の手順を踏む必要があります。