这是我的答案,与@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 中的值)那么您将需要更像@zposten 的答案,它永远不会让data 数组对象从包装器中逃脱。如果您确实需要使用数据数组 created at another function,则需要类似我的解决方案 - 但您必须采取其他步骤来确保数组不会在包装器背后摆弄。