Hier ist meine Antwort, die wie so ziemlich was @zposten zur Verfügung gestellt, aber Adresse ist auch der data[] array created at another function
Anforderung des OP:
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);
}
}
Um zu überprüfen und zu demonstrieren, habe ich:
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);
}
}
und erhielt die folgenden zu Konsole:
{ 0, 1, 2, 3 }
{ 0, 1, 9, 3 }
Es gibt verschiedene Gründe, warum Wrapperklassen wie dieses (Spielzeug-) Beispiel nützlich sind, aber wenn Sie das Datenarray vor Änderungen von außen "schützen" wollen (z. B. nur setPixel(int, int)
darf Werte in data
ändern) dann benötigen Sie etwas mehr wie @ zposten Antwort, die nie das Array-Objekt data
aus dem Wrapper entkommen lassen. Wenn Sie ein Datenarray created at another function
verwenden müssen, dann ist etwas wie meine Lösung erforderlich - aber Sie müssen andere Schritte ausführen, um sicherzustellen, dass das Array nicht hinter der Rückseite des Wrappers manipuliert wird.