Tengo algunas preguntas sobre getters y setters para matrices. Supongamos que tenemos una clase como esta, lo que hace una copia privada de una matriz en su constructor:Getters y setters para matrices
import java.util.Arrays;
public class Foo
{
private int[] array;
public Foo(int[] array) {
this.array = Arrays.copyOf(array, array.length);
}
}
Queremos que la matriz sólo se puede acceder a/mutado a través de los captadores y definidores. Si tenemos un captador que tiene este aspecto:
public int[] getArray() {
return array;
}
en contra del propósito del captador ya que estamos devolviendo una referencia que permite al usuario modificar directamente los elementos de la matriz. p.ej.
Foo foo = new Foo(someArray);
...
int[] bar = foo.getArray();
bar[0] = 123; // Now foo.array[0] = 123 and we haven't used a setter!
Así que, presumiblemente, necesitamos algo como esto:
public int getElement(int index) {
return array[index];
}
Del mismo modo para los emisores. Pero si estamos haciendo las cosas en función de cada elemento, también vamos a tener que proporcionar un medio para conseguir la longitud:
public int getArrayLength() {
return array.length;
}
Esto ya es un poco desordenado para una matriz de dimensión 1, pero decir que tenemos una matriz multidimensional en su lugar:
import java.util.Arrays;
public class Foo
{
private int[][][] array;
public Foo(int[][][] array) {
// Code for making a deep copy here
}
public int getElement(int i, int j, int k) {
return array[i][j][k];
}
public void setElement(int i, int j, int k, int value) {
array[i][j][k] = value;
}
public int getArrayLength() {
return array.length;
}
public int getArrayLength(int i) {
return array[i].length;
}
public int getArrayLength(int i, int j) {
return array[i][j].length;
}
}
se trata de una gran cantidad de código para una tarea tan trivial, y lo más importante es un desastre a utilizar realmente. ¿Realmente tenemos que terminar con algo como esto, o hay una mejor manera de hacerlo? He buscado por todos lados y no parece haber una "práctica estándar" para esto.
¿ha mirado las listas? – Jacob
Las matrices son tan de 1900. – Marcelo